【问题标题】:d3.js rotate text in svgd3.js 在 svg 中旋转文本
【发布时间】:2018-11-03 14:17:22
【问题描述】:

我对 d3 还很陌生,但这似乎是一个相当简单的问题,我找不到答案。也许我只是缺少一些基本的东西。无论如何,非常感谢任何帮助。

我在我的 svg 中创建了圆圈,我想用我已经完成的文本标记它们,但是文本重叠,所以我想将文本旋转 45 度(技术上是 315 度)。这是我尝试此操作的代码的 sn-p:

        var texts = svg.selectAll("text")
            .data(data)
            .enter()
            .append("text")
            .attr ("x",function(d, i) { return (i * 30) + 50;})
            .attr ("y",function(d) { return 250 - (d.some_var * 50);})
            .attr("rotate", 315)
            .text(function(d){ return d.name; });

奇怪的是,这会旋转单词中的每个字母,而不是旋转整个单词。附上截图。

我在这里缺少什么?感谢您的任何指导!

【问题讨论】:

标签: javascript d3.js svg


【解决方案1】:

此时您正在旋转每个文本元素:

.attr("rotate", 315)

您需要转换整个文本元素,因此将旋转替换为以下内容:

.attr('transform', 'rotate(45)')

您需要根据自己的需要调整值,但这应该可以解决问题。

您也可以将 x/y 坐标直接传入旋转函数以保持其位置,即

.attr('transform', 'rotate(45 ' + xValue + ' ' + yValue + ')')

【讨论】:

  • 谢谢。我不是 100% 确定,但这似乎是在相对于原点旋转它们。我想相对于我给它们的attr("x", ..)attr("y", ..) 旋转它们。如有必要,我可以附上屏幕截图。
  • 是的,请您附上尽可能详细的屏幕截图。
  • 我想我现在明白你的意思了。我已更新答案以包含我认为您想要的内容。
  • 我无法让你的想法付诸实践@ArnaudStephan,请参阅plnkr.co/edit/9pxJLz?p=preview
  • 我不确定我是否理解你想要什么,因为你的 Plunker 对我来说似乎很好。
猜你喜欢
  • 1970-01-01
  • 2015-10-31
  • 2013-06-18
  • 2013-05-18
  • 2017-07-27
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多