d3.js - 如何调整 dc.js 和 crossfilter 的分箱?这是性能瓶颈吗?

标签 d3.js analytics dc.js crossfilter

我正在尝试制作一个通用交叉过滤器,可以接收 csv 并构建仪表板。以下是工作示例:

但由于某种原因,航类数据缓慢且 react 迟钝。比较这两个分析相同数据的情况:

我认为这是因为直方图分箱太详细,但我在 api 引用中找不到调整它的好方法。 @gordonwoodhull mentioned :

If the binning is wrong you really want to look at the way you've set up crossfilter - dc.js just uses what it is given.

如何调整交叉过滤器的分级?我尝试过弄乱 xUnitsdimensiongroup 四舍五入无效。

This is the problem code I suspect is slow/wrong :

    var dim = ndx.dimension(function (d) { return d[propName]; });

    if (isNumeric(data[0][propName])) {
        var theChart = dc.barChart("#" + chartId);

        var countGroup = dim.group().reduceCount();
        var minMax = d3.extent(data, function (d) { return +d[propName] });
        var min = +minMax[0];
        var max = +minMax[1];
        theChart
            .width(gfilter.width).height(gfilter.height)
            .dimension(dim)
            .group(countGroup)
            .x(d3.scale.linear().domain([min, max]))
            .elasticY(true);
        theChart.yAxis().ticks(2);

最佳答案

您可以通过将调整值的函数传递给 group() 方法来调整分箱。例如,该组将创建整数箱:

var countGroup = dim.group(function (v) { return Math.floor(v); });

这个会创建每件 20 个单位的箱子:

var countGroup = dim.group(function(d) { return Math.floor(d / 20) * 20 });

分解出 bin 大小的变量:

var bin = 20;  // or any integer
var countGroup = dim.group(function(d) { return Math.floor(d / bin) * bin });

如果您使用分箱,您可能还希望条形的宽度与您的分箱尺寸相匹配。为此,请在条形图上添加对 xUnits() 的调用。 xUnits() 设置轴上的点数:

.xUnits(function(start, end, xDomain) { return (end - start) / bin; }) 

请参阅 crossfilter dimension group() 的文档, dc.js xUnits()

关于d3.js - 如何调整 dc.js 和 crossfilter 的分箱?这是性能瓶颈吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876422/

相关文章:

javascript - D3 .merge函数

algorithm - 如何根据过去的观察对数据进行聚类和排序?

javascript - 问题在 Y 轴上对行图表进行排序。 Dc-js 图表

javascript - DC.js |我怎样才能让.title(工具提示)在箱线图上工作?

javascript - 在 D3 Sankey 图中的最后一个节点后添加文本

javascript - ".on"函数的顺序在 D3 中重要吗?

scroll - d3js如何滚动或补间属性

sql - SQL分类表使用“从-到”

r - 如何使用 R 创建 ADBUDG 经济营销模型

javascript - DC.js 数据表未按应有的方式显示