d3.js - NVD3 水平条形图标签太长

标签 d3.js nvd3.js

我有带有长标签的数据,即:

values:
  [      
    { x : "This is a really looong label", y : 40 },
    { x : "Short label", y : 30 } 
  ]

仅显示一小部分文本,其余部分隐藏

这是一个jsfiddle来演示这个问题。

理想情况下,我想为标签设置自定义宽度和/或使它们能够在溢出时使用多行。

这可能吗?

最佳答案

您想要做的事情可能超出了 nvd3 所编写的功能。

实际上,我刚刚找到了一种使用 d3 的方法,虽然有些困难,但也许可以应用于 nvd3。它涉及动态计算句子长度和大小,然后通过使用绝对和相对坐标定位计算出的段来包装它。请参阅此处的示例:

http://bl.ocks.org/mbostock/7555321

也就是说,当您想要获得这种级别的定制时,最好选择 d3。如果您在项目中使用 nvd3 来获取其他图表,则您已经可以访问 d3。网上有许多使用 d3 的水平条形图示例。例如,这里有 d3 创建者 Mike Bostock 的精彩教程,他将逐步引导您完成使用 d3 制作水平条形图所需的步骤:

http://bost.ocks.org/mike/bar/

以及使用 d3 的水平条形图的一些示例:

即使使用 d3,您可以轻松访问底层 svg 引用,但很难将文本换行到 svg 中。事实上,大多数浏览器使用的 svg 版本甚至不支持 svg 文本换行。

要解决此限制,您可以使用我上面链接的方法,其中涉及动态计算句子长度,并使用坐标系动态定位 1 个或多个段。然而,最简单的方法可能是使用 foreignObject 元素将 HTML 元素嵌入到 svg 元素中。获得 HTML div 后,您可以轻松设置宽度,文本将自动换行。

有关如何执行此操作的更多详细信息:

Auto line-wrapping in SVG text

如果您在使用此方法使文本换行时遇到任何问题,请在另一个问题中询问,我很乐意为您提供帮助。

关于d3.js - NVD3 水平条形图标签太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546731/

相关文章:

jquery - 如何使用 d3.js 在线图中的线条上获得标签

javascript - 带取景器的条形图 d3.js

javascript - 将 Json 数据加载到 nvd3 图中

javascript - NVD3 noData 文本颜色变化

css - D3 -- 无法通过 css 类设置文本颜色

javascript - 在 CSS 中重新缩放 SVG

javascript - 当其他图表类型正确定位时,为什么我的圆环图位于容器外部?

svg - 从中间逐渐向外画一条路径

javascript - nvd3.js - 折线图中的较大点

javascript - 传单 Google map 和 d3 Voronoi 图叠加