d3.js - dc.js - 动态更改折线图中堆叠层的 valueAccessor 并重绘它

标签 d3.js dc.js crossfilter

我正在尝试实现一个仪表板来显示基本数据。

我实际上完全陷入了一个问题。奇怪的是,我在网上找不到任何类似的东西,所以我没有太多关于如何继续前进的线索。

我主要有两个图表:

  • 一个名为“stackChart”的折线图
    • 使用 valueAccessor 函数将消费显示为基础层
    • 将生产显示为堆叠层及其值访问器函数
  • 一个名为“volumeChart”的条形图,它只是折线图的 rangeChart

我使用单选按钮选择是按总和还是按平均值聚合分组数据(使用与此 example 相同的方法),然后我只需使用:

stackChart.valueAccessor(/*function with new value (avg or sum)*/);
dc.redrawAll();

刷新基础层(消耗)。

我无法通过更新其 valueAccessor 来刷新“堆叠层”!我找不到任何方法来访问它的 valueAccessor (或者,最坏的情况,只是完全删除堆叠层,然后仅使用“.stack(...)”添加一个新的刷新的堆叠层)。

这是我的代码中构建图表的相应部分:

// Charts customization #js
        stackChart
            .renderArea(true)
            .height(350)
            .transitionDuration(1500)
            .dimension(dateDim)
            .group(powByTime, "Consumption")
            // BASE LAYER valueAccessor HERE
            .valueAccessor(function(d) { return d.value.conSum; })
            .x(d3.time.scale().domain([minDate, maxDate]))
            .xUnits(d3.time.days)
            .elasticY(true)
            .renderHorizontalGridLines(true)
            .legend(dc.legend().x(80).y(0).itemHeight(13).gap(5))
            .brushOn(false)
            // STACKED LAYER HERE
            .stack(powByTime, "Production", function(d) { return d.value.prodSum; })
            .rangeChart(volumeChart)
            .controlsUseVisibility(true)
        ;

这里是我查找单选按钮中的更改并重新绘制图层的位置:

// Listen for changes
d3.selectAll('#select-operation input')
    .on('click', function() {
        var aggrMode = this.value;  // fetch "avg" or "sum" from buttons
        // UPDATE BASE LAYER HERE:
        stackChart.valueAccessor(function(d) { var sel = accessors[aggrMode]['consPow']; return d.value[sel]; });
        // ???HOW TO UPDATE STACKED LAYER valueAccessor function???
        //stackChart.stack.valueAccessor(function(d) { var sel = accessors[aggrMode]['prodPow']; return d.value[sel]; });
        dc.redrawAll();
    });

如果您需要有关我正在尝试执行的操作的更多详细信息以及完整代码,您可以查看 here .

作为引用,它是这样的: enter image description here

最佳答案

我不太了解 dc.js,但是一旦设置了访问器,您可能就无法更改它了。尝试为您的访问器编写一个函数,该函数将返回总和或平均值,具体取决于您可以设置的某些变量的状态。

关于d3.js - dc.js - 动态更改折线图中堆叠层的 valueAccessor 并重绘它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700431/

相关文章:

javascript - 过滤后 dc/d3 折线图在 y 轴上崩溃为 0

javascript - 如何更改 d3.js 中缩放行为的插值

javascript - d3 js 折线图采用两种不同的数据格式。我如何区分这两者?

d3.js - 图例标签和颜色更改为黑色 dc.js d3.js

dc.js - crossfilter + dc.js//维度组相互包含

d3.js - 如何在 dc.js 饼图切片中添加图标而不是文本

dc.js - 需要定制reducer来扣除两个值

d3.js - dc.js - 监听图表组渲染

javascript - 如何获取对象数组的分位数

javascript - 删除 d3js 日历中的周末