Javascript D3分组条形图:如何旋转x轴刻度的文本?

Javascript D3分组条形图:如何旋转x轴刻度的文本?,javascript,svg,d3.js,bar-chart,axis-labels,Javascript,Svg,D3.js,Bar Chart,Axis Labels,我使用的是分组条形图(),但x轴的文本非常长,如所附图片所示。如何旋转文本?多谢各位 可以找到合理的解决方案 结果如下所示: 确保您完全理解这部分代码: svg.append("g") .attr("class", "x axis") .attr("transform", "translate(0," + height + ")") .call(xAxis) .selectAll("text") .style("text-anchor", "end"

我使用的是分组条形图(),但x轴的文本非常长,如所附图片所示。如何旋转文本?多谢各位

可以找到合理的解决方案

结果如下所示:

确保您完全理解这部分代码:

svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis)
    .selectAll("text")  
    .style("text-anchor", "end")
    .attr("dx", "-.8em")
    .attr("dy", ".15em")
    .attr("transform", "rotate(-65)");
-65
是标签文本旋转的角度,单位为度

另外,您应该增加底部的边距,这样旋转的文本就不会被剪裁

警告:旋转文本最终不可避免地由浏览器呈现(D3只是创建了由浏览器解释的适当svg),而且他们在呈现旋转文本时做得很糟糕(与高级绘图或图表软件相反)

另外,相关问题:

使用SVG属性旋转

此变换定义指定围绕给定点旋转度

请尝试以下代码:

 svg.append("g") // Add the X Axis
    .attr("class", "x axis")
    .attr("id", "x")
        .attr("transform", "translate(0," + (h) + ")")
        .call(xAxis)
        .selectAll("text")
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", ".15em")
        .attr("transform", function (d) {
        return "rotate(-30)";
    });

您可能需要考虑使用,它支持支持此特性的D3轴组件替换。 D3FC有一个适配器组件,如果轴标签发生碰撞,该组件将自动旋转轴标签:

const axis = fc.axisLabelRotate(fc.axisOrdinalBottom(foodScale));
这就是它的作用:


全面披露-我是D3FC库的维护者和贡献者

请注意:不需要将函数传递到最后的
attr()
调用中,因为字符串不依赖于数据点。