我正在使用dc.js来显示饼图。我在饼图中看到的所有示例均包含返回单个值的交叉过滤器尺寸
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甚至可以做到这一点吗?
不是专家,但我认为您需要在组中使用.reduce()并创建自己的reduceAdd,reduceRemove和reduceInitial函数。
.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value();
类似于解释here,只是用于饼图,而不是条形图。
我知道这个问题已经七岁了。我一直在快速审查最受欢迎的交叉滤波器问题,这是第4个问题。(是的,我很拖延。)
标签尺寸或Dimensions with Arrays已在Crossfilter 1.4.0中实现,并在后续版本中进行了错误修复。
[声明尺寸时,为可选的第二个参数传递true
,然后使尺寸键函数返回一个数组(如问题所示)。每条记录的每个键都会被计数一次。
警告:由于行被多次计数,因此请勿在期望值总计为100%的任何地方(例如pie chart)使用这种尺寸。