【发布时间】:2020-05-24 14:30:06
【问题描述】:
我想显示最近的 10 个箱形图。
如果将过滤器应用于条形图或折线图,则箱线图应根据这些过滤器显示最近的 10 条记录。
我按日期(序数)制作维度。但我无法得到结果。
我不知道如何处理假组。我是 dc.js 的新手。
附上场景图片。如果有人需要更多详细信息来帮助我,请告诉我。
在图像中我尝试了一些时间尺度的解决方案。
【问题讨论】:
标签: d3.js dc.js crossfilter
我想显示最近的 10 个箱形图。
如果将过滤器应用于条形图或折线图,则箱线图应根据这些过滤器显示最近的 10 条记录。
我按日期(序数)制作维度。但我无法得到结果。
我不知道如何处理假组。我是 dc.js 的新手。
附上场景图片。如果有人需要更多详细信息来帮助我,请告诉我。
在图像中我尝试了一些时间尺度的解决方案。
【问题讨论】:
标签: d3.js dc.js crossfilter
您可以使用两个假组来执行此操作,一个用于删除空箱形图,另一个用于获取结果数据的最后 N 个元素。
删除空箱形图:
function remove_empty_array_bins(group) {
return {
all: function() {
return group.all().filter(d => d.value.length);
}
};
}
这只是过滤垃圾箱,删除 .value 数组长度为 0 的任何地方。
取最后N个元素:
function cap_group(group, N) {
return {
all: function() {
var all = group.all();
return all.slice(all.length - N);
}
};
}
这基本上就是 cap mixin 所做的,除了没有为“others”创建一个 bin(这有点棘手)。
我们从原始组中取出数据,看看它有多长,然后从all.length - N 到最后的slice 那个数组。
在将它们传递到图表时将它们链接在一起:
chart
.group(cap_group(remove_empty_array_bins(closeGroup), 5))
我使用 5 而不是 10,因为我要处理的数据集较小。
此示例使用“实时”时间刻度而不是序号日期。有几种方法可以进行序号日期,但如果您的组仍然从低日期到高日期排序,这应该仍然有效。
如果没有,您必须编辑您的问题以包含您用于生成序数日期组的代码示例。
【讨论】: