javascript - d3js v5 调整分组条形图大小

标签 javascript d3.js

我正在尝试使用 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());

}

enter image description here

当我开始调整窗口大小时,x 轴没问题,但我最近的 x 位置不“跟随”x 轴的刻度。 enter image description here

然后,我怀疑问题是由于 x- 属性引起的,但是我该如何解决这个问题?

这是我的代码:https://plnkr.co/edit/XEoM7lsBvZQmY87Wz1SP?p=preview

最佳答案

将类 (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/

相关文章:

javascript - 当缓存硬重新加载时,我的toggleClass函数有时仅适用于我的JSON创建的字段

javascript - d3.json 无法从 json 文件读取多个对象

d3.js - 如何保持 SVG 标记的宽度和高度?

java - 如何使用 Rhino 执行 JavaScript 库并在 JavaScript 库上调用 API 获取 HTML

javascript - 如何在 TypeScript 中正确输入用作 map 的 JavaScript 对象

javascript - 制作自己对象的副本而不是引用(更新后的帖子,不同的 Q)

javascript - 我可以像 flow 一样使用 typescript 可选吗?

d3.js - 如何在d3中获得父选择?

javascript - 渲染 d3.js html 表而不阻塞 UI

javascript - D3 : map with topojson doesn't render properly