D3.js 在d3js条形图中,我想要固定的条形宽度

D3.js 在d3js条形图中,我想要固定的条形宽度,d3.js,D3.js,我想固定酒吧的大小和宽度 从上面的示例中,我更改了 svg.selectAll("bar") .data(data) .enter().append("rect") .style("fill", "steelblue") .attr("x", function(d) { return x(d.date); }) .attr("width", x.rangeBand()) .attr("y", function(d) { ret

我想固定酒吧的大小和宽度

从上面的示例中,我更改了

 svg.selectAll("bar")
      .data(data)
    .enter().append("rect")
      .style("fill", "steelblue")
      .attr("x", function(d) { return x(d.date); })
      .attr("width", x.rangeBand())
      .attr("y", function(d) { return y(d.value); })
      .attr("height", function(d) { return height - y(d.value); });


但是标签没有移动到正确的位置,而且条重叠了

您必须更改
x
比例的
范围()
,以适应您的条宽值:

var x = d3.scale.ordinal().rangeRoundBands([0, width], .05);
至(如果您想要50px作为条宽)


range()
方法用于定义电子秤的显示空间。

我正在寻找类似的解决方案。@JulCh给出的答案对我来说不是现成的,而是引导我走向正确的方向

尝试:

其中,内部
d3.range
创建一个数组,其中包含由
data.length
或一些
常量
number(您希望显示的条数)确定的元素数

示例:如果
data.length
或某个
常量为8
,则
[0,1,2,3,4,5,6,7]
d3.range(8)

然后,
map
函数将
50的固定宽度乘以返回
[0,50100150200250300350]的数组中的每个元素。

D3将使用这些精确值来放置条形图

var x = d3.scale.ordinal().rangeRoundBands([0, width], .05);
var x = d3.scale.ordinal().range([0, data.length * 50]);
var x = d3.scale.ordinal()
          .range(d3.range(data.length).map(function (d) { return d * 50; }));