DC.js堆叠在折线图中未显示

问题描述 投票:1回答:1

我在折线图中渲染堆栈时遇到问题。

我有一个减少计算三个平均值。我可以在.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

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

d3.js dc.js crossfilter
1个回答
0
投票

可能有可能改进那些减少功能,但它们是正确的基本想法。您必须以某种方式计算每个值,并计算每个值的平均值。

也许有一些聪明的方法来编写更少的代码,但你所做的很清楚。

看起来你出错的地方是使用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),否则顶线可能会被修剪,使得很难看到。)

© www.soinside.com 2019 - 2024. All rights reserved.