如何避免 d3 条形图截断 x 轴?

How to avoid x axis truncate with d3 bar chart?

提问人:david9ppo 提问时间:11/15/2023 最后编辑:david9ppo 更新时间:11/16/2023 访问量:36

问:

我正在处理一个问题,试图使用 div 中的视图框绘制 d3 条形图。问题在于 x 轴标签不适合视图框尺寸,并且它们看起来被截断。只有当我将高度的视图框增加到 Chrome 开发人员控制台标签时才适合。

我的代码:

const width = 1152;
const height = 700;
const marginTop = 100;
const marginRight = 0;
const marginBottom = 30;
const marginLeft = 100;

var svg = d3.select("#divAccesos")
.append("svg")
.attr("viewBox", [0, 0, width, height]);

// Add axes
svg.append("g")
.attr("class", "x axis")  
.attr("transform", `translate(0,${height - marginBottom})`)
.call(d3.axisBottom(xScale))
.selectAll("text")  
            .style("text-anchor", "end")
            .attr("dx", "-.8em")
            .attr("dy", ".15em")
            .attr("font-size", "1.6em")
            .attr("transform", "rotate(-65)" );

包含 viewbox 的 div 是这样的:

<div id="divAccesos" align="center" style="position:relative; width:80%; overflow: visible; padding-top:4vh; height: 900px;"> 
</div>

enter image description here

有什么想法可以解决这个问题吗?提前非常感谢!:-)

[使用解决方案更新]关键是增加 marginBottom,以便为 x 轴标签腾出空间,保持相同的高度值。

const width = 1152;
const height = 600;
const marginTop = 100;
const marginRight = 0;
const marginBottom = 200; // before it was 30
const marginLeft = 100;
HTML CSS SVG D3.js

评论

0赞 david9ppo 11/15/2023
看起来酒吧正试图填满整个尺寸,但标签仍然不合适。我可以将高度设置为 2000px,结果相同:(只有当我在开发者控制台中更改它时,我才会得到它

答:

1赞 Robert Longson 11/15/2023 #1

viewBox 属性(与所有属性一样)需要一个字符串。您正在传入一个数组。

var svg = d3.select("#divAccesos")
.append("svg")
.attr("viewBox", `0, 0, ${width}, ${height}`);