D3.js DC.js xAxis范围,仅显示子集
在下面的示例中,调整xAxis以仅从2-max显示“数量级事件数”的最佳方法是什么 更改此行:D3.js DC.js xAxis范围,仅显示子集,d3.js,dc.js,D3.js,Dc.js,在下面的示例中,调整xAxis以仅从2-max显示“数量级事件数”的最佳方法是什么 更改此行: .x(d3.scale.linear().domain([0.5, 7.5])) 致: 这个答案扩展了@Gerardo的解决方案,使图表动态调整,并处理了一些dc.js的怪癖 首先,这个例子的原始作者只是为了让东西正常工作而捏造了一些东西。如果需要真正的动态轴,则需要向dc.js演示如何计算自身的条宽: magnitudeChart .xUnits(dc.units.fp.precision(0
.x(d3.scale.linear().domain([0.5, 7.5]))
致:
这个答案扩展了@Gerardo的解决方案,使图表动态调整,并处理了一些dc.js的怪癖 首先,这个例子的原始作者只是为了让东西正常工作而捏造了一些东西。如果需要真正的动态轴,则需要向dc.js演示如何计算自身的条宽:
magnitudeChart
.xUnits(dc.units.fp.precision(0.1))
然后删除.gap(65)
——这种神奇的数字总是一个信号,表明有人不知道如何自动计算
dc.js处理条形图的方式有一些奇怪之处。首先,当它设置域时,它并没有真正考虑到它自己的条宽或中心-它使用的正是你给它的。您会注意到,在自动计算最大值时,最右边的条丢失了。(这也发生在elasticX(true)
上。)
因此,让我们关闭条形居中,并在每次计算时将0.1条形宽度添加到域中
magnitudeChart
.centerBar(false)
.x(d3.scale.linear().domain([2, d3.max(data, d=>d.mag)+0.1]))
接下来,crossfilter不会自动删除空的存储箱,因此我们可以将组包装在一个容器中,以便执行此操作:
function remove_empty_bins(source_group) {
return {
all:function () {
return source_group.all().filter(function(d) {
return d.value != 0;
});
}
};
}
magnitudeChart
.group(remove_empty_bins(magValueGroupCount))
我们可以让图表在每次重画时重新计算其域,如下所示:
.on('preRedraw', function(chart) {
chart.x().domain([2, d3.max(chart.group().all(), kv=>kv.key) + 0.1]);
chart.rescale();
});
分岔点:感谢您的快速响应。这为我指明了正确的方向。我还没有想清楚我想要的是有序的还是线性的x标度。回顾我的数据,我实际上想要序数,一个很好的例子剖析。这会很有帮助的。很好的解释。你是dc的创造者,对吧?不,我刚刚维护了几年。我想我从回答问题中学到的比从编码中学到的更多,尽管我喜欢这两种活动。:-)
.on('preRedraw', function(chart) {
chart.x().domain([2, d3.max(chart.group().all(), kv=>kv.key) + 0.1]);
chart.rescale();
});