我在d3中成功设置了直方图,包括刻度和所有直方图,但我对条形矩形的宽度有一个奇怪的问题。 由于我正在使用的数据具有非常小的值(例如0.0012),我需要应用比例来使它们可见。 对于x-scale,我这样设置:
var domain = [0.00,0.01]
var x = d3.scale.linear()
.domain(domain)
.range([margin, width-margin]);
使用以下方法正确调用直方图:
var histog = d3 .layout.histogram()
.bins(35)
(Peso);
其中Peso是解析整个数据集中数据的变量(控制台正确记录值)。 现在问题是:当我设置条形图时,如果我使用这些线条:
svg.append("g")
.attr("id", "Sans")
.selectAll("rect")
.data(histog)
.enter()
.append("rect")
.attr("x", function (d,i) { return x(d.x); })
.attr("y", function (d) { return (height-margin) - (y(d.y)); })
.attr("width", function (d) { return (d.dx); })
.attr("height", function (d) { return y(d.y); })
.attr("fill", "lightblue")
.attr("opacity", 0.5);
并且没有应用x刻度的宽度当然设置为1 px,因为我有很小的值和间隔。事实是,如果我将x-scale应用于d.dx,则条形的宽度太大而且它们相互重叠,如下所示:
我有什么遗失的吗?似乎一切都正确地设置给我,我不知道还有什么可能导致这一点。非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
简短版本:不要使用线性比例来确定条形图中条形图的位置和宽度。
线性刻度将其输入线性映射到输出范围,而不考虑任何宽度。在这种情况下您需要的(参见例如this example)是ordinal scale,除了进行映射之外,还可以获得与输入间隔相关的输出宽度。这样,您可以调用刻度来获取条形的位置,并调用宽度作为条形宽度的间隔。