用点进行文本换行 (graphviz)
我使用下面的代码使用点(graphviz)创建了一个图形。
digraph
{
node [color=Blue,shape=box]
1.1 [label="Frequency of t exceeds upper threshold"]
2.1 [label="t has d-mutant tiles"]
2.2 [label="Valid"]
3.1 [label="Frequency of t exceeds lower threshold"]
3.2 [label="Frequency of t exceeds lower threshold"]
4.1 [label="Insufficient evidence"]
4.2 [label="Valid"]
4.3 [label="t has only one d-mutant that exceeds lower threshold"]
4.4 [label="Are there any d-mutant tiles with significantly higher frequencies?"]
5.1 [label="Insufficient evidence"]
node [color=Green] 5.2 [label="Correct t to t'"] node [color=Blue]
5.3 [label="t has a d-mutant tile t' that is closer than all other d-mutant tiles and for which a corrected base has a higher quality score"]
5.4 [label="Valid"]
6.1 [label="Insufficient evidence"]
6.2 [label="t' is unique"]
7.1 [label="Insufficient evidence"]
node [color=Green] 7.2 [label="Correct t to t'"] node [color=Blue]
1.1 -> 2.1 [label="no"]
1.1 -> 2.2 [label="yes"]
2.1 -> 3.1 [label="no"]
2.1 -> 3.2 [label="yes"]
3.1 -> 4.1 [label="no"]
3.1 -> 4.2 [label="yes"]
3.2 -> 4.3 [label="no"]
3.2 -> 4.4 [label="yes"]
4.3 -> 5.1 [label="no"]
4.3 -> 5.2 [label="yes"]
4.4 -> 5.3 [label="no"]
4.4 -> 5.4 [label="yes"]
5.3 -> 6.1 [label="no"]
5.3 -> 6.2 [label="yes"]
6.2 -> 7.1 [label="no"]
6.2 -> 7.2 [label="yes"]
}
正如您所看到的,图形中的一些框的标签中有很多文本。我可以插入 \n
字符来确保框不太宽,但我想知道是否有一种方法可以设置框的宽度,然后让框标签执行硬包装。这可能吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
graphviz 不支持自动换行。您必须手动输入\n。
您可以为节点设置宽度和高度并将其定义为固定大小 - 这将
限制节点的大小并仅绘制适合节点的文本
graphviz doesn't support automatic line breaks. You have to put the \n in manually.
you can set a width and a height to a node and define it as fixedsized - this will
limit the size of the node and draw only as much text as fits into the node
虽然 graphviz 本身不支持文本换行,
dot2tex (latex+graphviz) 确实如此。
dot2texi 乳胶包提供了所有 -一体化解决方案,
(从用户的角度来看)对单个工具的单个调用即可构建图表。
一个简短的例子:
可以调用例如:
pdflatex --shell-escape myFile.tex
来编译,文本将自动以规定的固定宽度换行。附带说明一下,这个工具似乎是 graphviz 对节点内容的有限排版控制的一个方便的解决方法。
Although graphviz does not support text wrapping by itself,
dot2tex (latex+graphviz) does.
The dot2texi latex package gives an all-in-one solution,
with (from the users point of view) a single call to a single tool to build the graph.
A short example:
This can be compiled invoking for example:
pdflatex --shell-escape myFile.tex
, the text will be automatically wrapped at the prescribed fixed width.As a side note, this tool seems a handy workaround for graphviz' limited typesetting control of the nodes contents.
OP 编写了整个 Perl 脚本来实现此目的。我在他的博客中找到了它: 用点 (graphviz) 进行文本换行。
如果直接声明节点(例如
“节点标签”
),则Perl 脚本:将此程序保存为 setdotlabelwidth,然后只需将输出通过管道传输到 GraphViz 中。例如,如果要将宽度设置为 35 个字符,则命令为:
之前:
The OP wrote a whole Perl script to achieve this. I found it in his blog: Text wrapping with dot (graphviz).
Perl script:
Save this program as setdotlabelwidth, then simply pipe the output into GraphViz. If for example you want to set the width to 35 characters, then the command is:
Before:
After:
这是一个不同的(无 perl)解决方案,在 Graphviz 论坛关于 Graphviz word-wrap 的讨论中提到(https://forum.graphviz.org/t/text-wrapping-in-graphviz/753)。
它仅适用于无记录和无 html 标签(https://gist.github.com/steveroush /4287562c90855fd0d6a991e6159003ce)。
Here is a different (perl-less) solution, mentioned in a Graphviz Forum discussion of Graphviz word-wrap (https://forum.graphviz.org/t/text-wrapping-in-graphviz/753).
It only works for record-less and html-less labels (https://gist.github.com/steveroush/4287562c90855fd0d6a991e6159003ce).