当前位置: 首页 > 面试题库 >

如何在D3图表的标签中包含换行符?

梁丘飞鸾
2023-03-14
问题内容

我正在使用D3生成条形图。我在 _x_轴上使用的标签每个都是几个字长,由于这会使所有标签重叠,因此我需要将这些标签跨行打断。(如果我可以用换行符替换每个标签中的所有空格,那将是很好的。)

我最初是通过用文字换行符(&#xA;)替换空格并xml:space="preserve"在标签的<text>元素上进行设置来尝试此操作的。不幸的是,事实证明SVG不尊重此属性。接下来,我尝试将每个单词都包装成<tspan>以后可以样式化的格式。我通过此功能传递了每个标签:

function (text) {
    return '<tspan>' + text.replace(/ /g, '</tspan><tspan>') + '</tspan>';
}

但这只是将文字<tspan>s放入输出中。如何将文本标签包装在tspans中(或执行其他操作),以使标签不重叠?


问题答案:

我最终使用以下代码在行中打破了每个 x 轴标签:

var insertLinebreaks = function (d) {
    var el = d3.select(this);
    var words = d.split(' ');
    el.text('');

    for (var i = 0; i < words.length; i++) {
        var tspan = el.append('tspan').text(words[i]);
        if (i > 0)
            tspan.attr('x', 0).attr('dy', '15');
    }
};

svg.selectAll('g.x.axis g text').each(insertLinebreaks);

请注意,这假设标签已经创建。那么标签将按照您所需的方式进行设置。)此外,还没有任何实际的换行逻辑;因此,请参见图9。该函数将每个空格转换为换行符。这很好地满足了我的目的,但是您可能需要编辑该split()行,以更聪明地了解如何将字符串的各个部分划分为几行。



 类似资料:
  • 是否可以使用CSS@font-face向rmarkdown提供字体文件? 请注意,上面完全相同的css代码(少了样式标记)在本地存储在外部。css文件中并在RMD的yaml中引用 如果这是a/B问题,我的简单目标是应用自定义字体,同时避免使用Rmd文件本身以外的任何本地文件(即没有本地外部样式表,尽管从web上读取文件也很好)。 我认为唯一的两个选项要么是从web中读取字体文件,要么是在Rmd本身

  • 问题内容: 每当我尝试在React的中使用Font Awesome图标时,尽管它可以在普通HTML中运行,但它不会显示在结果网页上。 这是一个实时示例:http : //jsfiddle.net/pLWS3/ 哪里错了? 问题答案: React使用属性,例如DOM。 如果您使用开发版本,并查看控制台,则会出现警告。您可以在jsfiddle上看到它。 警告:未知的DOM属性类。您是说classNam

  • 任何人都可以知道如何做到这一点吗? 我想这是一个编辑文本,但是我怎么能同时放标签和文本呢? 先谢谢你

  • 主要问题是获取html文件的内容并删除所有标签。 我以前读过这些问题: 1,2,3 在读完所有这些之后,我决定使用,这对我真的很有帮助。我还意识到如何保持换行和替换

  • 我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用

  • 问题内容: 我以前没有使用过任何引导框架。我想在页面的bootstrap 3中包含一些glyphicons。据我了解,它们应该包含在我添加到页面的bootstrap.css文件中。当我查看bootstrap.css文件时,没有看到对它们的引用?尽管文件很大,我可能还是错过了一些东西。 我注意到,当我打开从引导程序3下载的 文件夹时,会有一个单独的文件夹,其中包含名为: 似乎这是字形符号所在的位置,