【问题标题】:d3 rotating text labelsd3 旋转文本标签
【发布时间】:2018-03-01 02:35:02
【问题描述】:

我有想要旋转的文本标签。

  in_years.selectAll(".xlabel")     
      .data(xTickLabels)
      .enter()
      .append("text")
      .attr("class","xlabel")
      .attr("text-anchor", "end") 
      //.attr("transform", "translate(0,0) rotate(-45)")
      .attr("font-size", "14px")
      .attr("x", (d,i) => xScale(xRange[i]))
      .attr("y", (d,i) => height+15)
      .text(function(d) { console.log(d);return d})
      ;

评论了“转换”行我得到图 1。取消注释我得到图 2 这对我来说没有意义。

关于为什么会发生这种情况以及如何解决它的任何提示?我为此使用 d3 v3

【问题讨论】:

    标签: d3.js axis-labels


    【解决方案1】:

    为什么旋转效果不如预期是由于rotate()的css属性。link

    根据MDN doc中的rotate函数定义:
    ''旋转轴经过原点''

    因此您必须翻译每个文本元素的 (x,y) 以使旋转轴与其在图形中的位置相关。

    // this code, which each text will rotate according to (0,0)
    svg.selectAll('text.norotation')
       .data(data)
       .enter()
       .append('text')
       .text((d)=>d)
       .classed('norotation', true)
       .attr('fill', 'black')
       .attr('x', (d,i)=> xScale(i))
       .attr('y', 200)
    

    修改一个

    //each text element will rotate according to its position
    svg.selectAll('text.rotation')
       .data(data)
       .enter()
       .append('text')
       .text((d)=>d)
       .classed('rotation', true)
       .attr('fill', 'black')
       .attr('transform', (d,i)=>{
            return 'translate( '+xScale(i)+' , '+220+'),'+ 'rotate(45)';})
       .attr('x', 0)
       .attr('y', 0)
    

    Observalbe 上的演示:https://beta.observablehq.com/@weitinglin/d3-rotating-text-labels

    【讨论】:

    • 感谢林伟霆清晰而详细的回答,确实解决了我的问题。谢谢你,祝你有美好的一天!
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2018-08-21
    • 2018-10-30
    • 1970-01-01
    • 2012-12-07
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多