如何用刻度包裹 D3 标签

Posted

技术标签:

【中文标题】如何用刻度包裹 D3 标签【英文标题】:How to wrap D3 labels with ticks 【发布时间】:2021-06-02 12:36:37 【问题描述】:

我正在尝试正确包装我的标签。我需要让刻度和标签匹配。我正在为标签使用 wrap 函数,但无法让它与 tspan 一起使用。

WORKING DEMO

更新

这是之前和之后的图片,以帮助了解我之后的内容。

【问题讨论】:

在饼图旁边添加一个“图例”块(颜色和标签)。在饼图段悬停时显示标签 你能添加一张你想要达到的目标的照片吗? 请给我几分钟 @UmeshMaharshi 请查看更新 我认为这可能会对您有所帮助:***.com/questions/37662554/… 【参考方案1】:

遗憾的是,没有简单的方法可以让 SVG <text> 元素的内容像在 html 中那样包装。不过我确实找到了this answer to a similar question,它建议使用D3 Plus 库将文本换行添加到D3。

如果由于某种原因这不是一个选项,您可能不得不自己计算包装,这是一个有点讨厌的过程,但通过一些努力是可行的。一般来说,您需要:

    创建一个与目标 SVG 文本具有相同宽度和字体样式的 HTML 元素 将所需内容逐字添加到此元素中 添加每个单词后检查 HTML 元素的高度,如果它增加了,您就知道在该单词之前需要一个换行符 一旦您知道需要多少行,就使用<tSpan> 元素来输出每一行文本(您必须手动设置每一行的顶部偏移)

如果可能的话,我绝对建议使用该库!

【讨论】:

以上是关于如何用刻度包裹 D3 标签的主要内容,如果未能解决你的问题,请参考以下文章

D3 x刻度定位

使用时间序列数据和scaleBand在D3条形图上指定刻度

添加 d3 时间轴开头的额外刻度

将文本添加到D3轴的外部刻度

在 D3.js 中创建带有序数刻度的文本标记 x 轴

使用 d3 对数刻度而不是线性刻度