【问题标题】:DC.js stack in line chart not showing折线图中的 DC.js 堆栈未显示
【发布时间】:2017-12-19 18:08:20
【问题描述】:

我在折线图中呈现堆栈时遇到问题。

我有一个减少计算三个平均值。我可以在 .group 中显示其中一个 Avg,但它在堆栈中不起作用

timeConstChart
.dimension(datesDim)
.group(evalConsReduced,"Buena", function(d){return d.value.buenaAvg}) // works
.stack(evalConsReduced,"Regular",function (d) {return d.value.regularAvg}) // <- Doesn't work
.stack(evalConsReduced,"Mala",function (d) {return d.value.malaAvg}) // <- Doesn't work neither
.x(d3.time.scale().domain([minDate,maxDate]))
.y(d3.time.scale().domain([0,100]));

奇怪的是,如果我忽略组的“return d.value.buenaAvg”,我可以从 d.value.regularAvg 得到结果

jsfiddle

注意:这是我第一次使用交叉过滤器,但我已经知道我的 reduce 函数不是最佳的,它们可以改进。这里的任何方向也将不胜感激。

【问题讨论】:

    标签: d3.js dc.js crossfilter


    【解决方案1】:

    也许可以改进这些reduce 函数,但它们是正确的基本思想。您必须以某种方式计算每个值,并计算每个值的平均值。

    也许有一些聪明的方法可以减少代码,但你所做的很清楚。

    看起来你出错的地方是使用toFixed - 这会返回一个字符串,当你尝试聚合字符串时会出现很多麻烦。

    例如,

    0.3 + 0.1 === 0.4
    

    但是

    '0.3' + '0.1' === '0.30.1'
    

    我认为您的堆栈中也发生了同样的事情,但是 dc.js 在某处进行了完整性检查并抛出了 NaN。

    这里是a fork of your fiddle with toFixed removed

    正如预期的那样,三个堆栈在 1 处加起来是一条绿线。(我添加了.clipPadding(2),因为否则顶线可能会被剪掉,很难看到。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      相关资源
      最近更新 更多