如何选择 dc.js 条形图中的 bin 数量?
How to choose number of bins in a dc.js barchart?
我在 dc.js
中创建了一个条形图:
d3.csv("input.csv", function (error, data) {
data.forEach(function (x) {
x.x = +x.x;
});
var ndx = crossfilter(data),
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 10) / 10;
});
var group1 = dim1.group(),
chart = dc.barChart("#barchart");
chart
.width(500)
.height(200)
.dimension(dim1)
.group(group1)
.x(d3.scale.linear().domain([0,3]))
.elasticY(true)
.barPadding([0.4])
chart.xAxis().tickFormat(function(d) {return d});
chart.yAxis().ticks(10);
});
但是柱数很少。我想将显示的条数增加到 12。
如何选择柱数?
这些行决定了 bin 的数量:
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 10) / 10;
});
var group1 = dim1.group(),
您在这里所做的是四舍五入到前十分之一 (0.1)。因此,x 等于 1.12、1.16、1.19 的任何行都将计入 1.1 bin 等
如果您想要确切的 bin 数量,则必须确定 x 的范围并将其除以所需的 bin 数量。如果您不需要那么精确的东西,您可以 fiddle 加上数字 10,直到得到您想要的东西。
比如改成
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 20) / 20;
});
var group1 = dim1.group(),
会给你两倍的箱子,因为它会向下舍入到前二十 (0.05)。
所以 1.12 将四舍五入为 1.10; 1.16、1.19 将四舍五入为 1.15 等
顺便说一句,parseFloat
是不必要的,因为您已经使用 x.x = +x.x
将 x 转换为数字
我在 dc.js
中创建了一个条形图:
d3.csv("input.csv", function (error, data) {
data.forEach(function (x) {
x.x = +x.x;
});
var ndx = crossfilter(data),
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 10) / 10;
});
var group1 = dim1.group(),
chart = dc.barChart("#barchart");
chart
.width(500)
.height(200)
.dimension(dim1)
.group(group1)
.x(d3.scale.linear().domain([0,3]))
.elasticY(true)
.barPadding([0.4])
chart.xAxis().tickFormat(function(d) {return d});
chart.yAxis().ticks(10);
});
但是柱数很少。我想将显示的条数增加到 12。
如何选择柱数?
这些行决定了 bin 的数量:
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 10) / 10;
});
var group1 = dim1.group(),
您在这里所做的是四舍五入到前十分之一 (0.1)。因此,x 等于 1.12、1.16、1.19 的任何行都将计入 1.1 bin 等
如果您想要确切的 bin 数量,则必须确定 x 的范围并将其除以所需的 bin 数量。如果您不需要那么精确的东西,您可以 fiddle 加上数字 10,直到得到您想要的东西。
比如改成
dim1 = ndx.dimension(function (d) {
return Math.floor(parseFloat(d['x']) * 20) / 20;
});
var group1 = dim1.group(),
会给你两倍的箱子,因为它会向下舍入到前二十 (0.05)。
所以 1.12 将四舍五入为 1.10; 1.16、1.19 将四舍五入为 1.15 等
顺便说一句,parseFloat
是不必要的,因为您已经使用 x.x = +x.x