我有以下 graphviz 图:
digraph finite_state_machine {
a -> b [ label = "c" ];
}
该图的输出应为
如果我尝试使用点来生成文件(例如通过dot -Tsvg test.dot > test.svg
),我确实会得到这样的结果。
但是,当我尝试使用 dotty 来显示它时,所有标签都显示为句点:
是什么原因导致了这个问题?我该如何解决?我过去在 Windows 和 Linux 上都曾多次在类似的图表上使用 dotty,但从未见过这种行为。
Ubuntu 10.04.3 LTS,Graphviz 版本 2.20.2(dotty 版本 96c)。
答案1
我的解决方案太简单了。我检查了一下/var/log/Xorg.0.log
,发现以下内容:
[ 52.308] (WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
[ 52.308] Entry deleted from font path.
[ 52.308] (WW) The directory "/usr/share/fonts/X11/100dpi/" does not exist.
[ 52.308] Entry deleted from font path.
...
[ 52.314] (WW) The directory "/usr/share/fonts/X11/75dpi" does not exist.
[ 52.314] Entry deleted from font path.
[ 52.314] (WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
[ 52.314] Entry deleted from font path.
因此,我安装了指示的软件包:
xfonts-100dpi
xfonts-cyrillic
...
defoma
psfontmgr
x-ttcidfont-conf
我重新启动了机器人,Dotty 图形变得漂亮了,但默认字体名称对我来说仍然未知。
答案2
我有同样的问题,但还没有找到解决方案,但我整理了一份解决方法列表(其中一些取自https://bugs.launchpad.net/ubuntu/+source/graphviz/+bug/1016777):
- 指定字体名称(属性
fontname="fixed"
对我有用)。请注意,您可以在文件开头使用全局属性,以避免必须为每个标签指定它:
digraph cfg {
graph [fontname="fixed"];
node [fontname="fixed"];
edge [fontname="fixed"];
...
}
使用
dot
(而不是 dotty)并将图形输出到图像文件(例如dot -Tpng file.dot -o file.png
),然后使用图像查看器。为避免创建临时文件,请使用支持从 读取的查看器stdin
,例如gwenview
(例如dot -Tpng file.dot | gwenview /dev/stdin
)。使用
xdot
,而不是 dotty。
虽然这些解决方法并不能解决实际问题,但如果您所需要的只是快速查看一些图表,它们可能比尝试修复问题更快(该问题仍然存在于基于 Ubuntu 14.04 的 Linux Mint 17 中)。
答案3
正如其他人提到的,您的字体配置不起作用。您可以在此处阅读有关如何配置的更多信息:
答案4
我在一家我曾短暂工作过的公司找到了一份内部文件,其中提到 dotty 在 Ubuntu 10.04 上存在问题,并敦促用户升级操作系统以解决这个问题。这种情况发生的原因对我来说仍然是个谜,而且“升级操作系统”是一个相当糟糕的解决方案,但它仍然应该可以解决这个问题,所以在这里发布它作为答案。