我正在使用dc.js来显示饼图。我在饼图中看到的所有示例都包含返回单个值的crossfilter维度
var quarter = ndx.dimension(function (d) {
var month = d.dd.getMonth();
if (month <= 3)
return "Q1";
else if (month > 3 && month <= 5)
return "Q2";
else if (month > 5 && month <= 7)
return "Q3";
else
return "Q4";
});
var quarterGroup = quarter.group().reduceSum(function (d) {
return d.volume;
});
得到的饼图将包含4个可能的值Q1,Q2,Q3和Q4。
我需要一个饼图,显示一个返回多个值的维度。例如,用户可以在属性内的一系列主题。在饼图中,我需要显示所有可能的主题,这意味着我需要返回数组中的所有主题。
即类似:
var subjects = ndx.dimension(function (d) {
return d.subjectArray
});
var subjectGroup = subjects.group()
但是这不会起作用,因为它会分割饼图以显示所有不同类型的arraylist而不是它们的内容。
我已经在这个问题上工作了一段时间,但无法找到解决方案。甚至可以用dc.js和crossfilter来做到这一点吗?
答案 0 :(得分:2)
我知道这个问题已经七岁了。我一直在快速审查最流行的未解决交叉过滤器问题,这是第4条。
标记尺寸或Dimensions with Arrays是在Crossfilter 1.4.0中实现的,并在后续版本中进行了错误修复。
声明尺寸时,传递true
作为可选的第二个参数,然后让尺寸键函数返回一个数组(如问题所示)。每条记录的每个键都会被计数一次。
警告:由于行的计数不止一次,因此不要在期望值总计为100%的任何地方(例如pie chart)使用这种尺寸。
答案 1 :(得分:0)
不是专家,但我认为您需要在组中使用.reduce()并创建自己的reduceAdd,reduceRemove和reduceInitial函数。
.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value();
像解释here一样,除了它是饼图,而不是条形图。