带点的文字包装(graphviz)

Dan*_*age 39 graphviz word-wrap

我使用下面的代码使用点(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"]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,图形中的某些框在标签中有很多文本.我可以插入\n字符以确保盒子不是太宽,但我想知道是否有一种方法可以设置盒子的宽度然后让盒子标签做一个硬包装.这可能吗?

Nik*_*ohl 33

graphviz不支持自动换行符.你必须手动输入\n.

您可以为节点设置宽度和高度,并将其定义为fixedsized - 这将限制节点的大小,并且只绘制适合节点的文本

  • 实际上对我来说它结果是假的,文本只是走出了节点的形状. (6认同)

小智 6

虽然 graphviz 本身不支持文本换行,但 dot2tex (latex+graphviz) 支持。dot2texi Latex包提供了一种一体化的解决方案,(从用户的角度)只需调用单个工具即可构建图表。

一个简短的例子:

\documentclass{standalone}
\usepackage{dot2texi}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\begin{dot2tex}[dot]
digraph G {                                             
d2toptions ="--autosize"
node    [lblstyle="text width=10em,align=center"]
a       [texlbl="This text will be automatically wrapped, for example at a fixed width."]
b       [texlbl="Manual linebreaks from past century can be avoided!"]
a -> b
}
\end{dot2tex}                                               
\end{document}
Run Code Online (Sandbox Code Playgroud)

可以调用例如: 进行编译pdflatex --shell-escape myFile.tex,文本将自动按规定的固定宽度换行。

附带说明一下,这个工具似乎是 graphviz 对节点内容的有限排版控制的一个方便的解决方法。