我正在尝试使用 resize() 函数调整分组条形图的大小。
function resize(){
width = parseInt(d3.select(".c_chart").style("width"), 10);
x0.rangeRound([margin.left, width-margin.right]);
x1.rangeRound([margin.left,x0.bandwidth()-margin.right])
yAxis.tickSize(width);
svg.selectAll("rect")
.attr("x", function(d) { return x1(d.key); })
.attr("width", x1.bandwidth());
svg.selectAll(".x_axis")
.call(xAxis)
.selectAll("text")
.call(wrap, x0.bandwidth());
}
当我开始调整窗口大小时,x 轴没问题,但我最近的 x 位置不“跟随”x 轴的刻度。
然后,我怀疑问题是由于 x- 属性引起的,但是我该如何解决这个问题?
最佳答案
将类 (gbar
) 添加到包含该组的 g
svg
.append("g")
.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d) { return "translate(" + x0(d.categorie) + ",0)"; })
.attr("class", "gbar")
.selectAll("rect")
.data(function(d) { return keys.map(function(key) { return {key: key, value: d[key]}; }); })
.enter().append("rect")
.attr("x", function(d) { return x1(d.key); })
.attr("y", function(d) { return y(d.value); })
.attr("width", x1.bandwidth())
.attr("height", function(d) { return height-margin.bottom - y(d.value); })
.attr("fill", function(d) { return z(d.key); });
在调整大小功能中更新翻译
svg.selectAll(".gbar")
.attr("transform", function(d) { return "translate(" + x0(d.categorie) + ",0)"; });
并更新 SVG 的大小
svg
.attr("width",width)
.attr("height",height);
不要采用x1
比例中的边距
const x1 = d3.scaleBand()
.padding(0.05)
.domain(keys)
//.rangeRound([margin.left,x0.bandwidth()-margin.right])
.rangeRound([0,x0.bandwidth()]);
// resize()
//x1.rangeRound([margin.left,x0.bandwidth()-margin.right])
x1.rangeRound([0,x0.bandwidth()])
唯一需要修复的是 y 轴网格线,........
关于javascript - d3js v5 调整分组条形图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263168/