Graphviz是这种类型图形的最佳工具吗?

11
我想创建一个类似下面这个图的图表...但它太过复杂。我想为每个正方形节点使用单独的图像,并为每个圆形节点使用相同的图像。
我想知道使用GraphViz是否是最佳选择,或者还有其他选项?
此外,我想知道是否可以在GraphViz中创建一个模板节点作为圆形节点并重用它?我不想一遍又一遍地指定属性,比如图像、形状等。

Sample Graph

2个回答

15

当然,这是在你的问题中绘制图形的代码(并且以下显示由dot呈现的渲染结果)。

digraph g {
rankdir = TB;
bgcolor = white;

edge[arrowsize=.7, color=black];
node[shape=box, color=black]

{rank=same; a, b, c};
{rank=same; d, e, f};
{rank=same; g, h};
{rank=same; i, j, k};

d[color=blue; shape=circle];
e[color=blue; shape=circle];
k[color=blue; shape=circle];

a -> d;
b -> d;
b -> e;
c -> e;
d -> g;
e -> h;
d -> i;
d -> j;
j -> k;
h -> k;
k -> f;
}


  1. 第一行的digraph是用来表示有向图(对于边带有方向的图)。

  2. 第四和第五行分别设置了默认的边缘和节点属性。换句话说,一旦设置了这些属性,您只需要为您想要与默认值不同的节点(或边缘)设置样式(包括属性+值)。您可以通过创建子图或离散的节点组来拥有多个节点 "模板"(请参见点手册)。

  3. rank=same允许您指定具有相同垂直位置的节点组(如果rankdir设置为TB,则意味着"从上到下")。

  4. 默认情况下,节点名称(例如我的图中的a、b、c)用作节点的标签。如果您不希望在渲染的图中显示这个标签,只需将

enter image description here


11

Graphviz非常适合你所需的功能。graphviz.org主网站目前似乎无法访问,但有人很好地将带有源代码的示例镜像到了Flickr上。

http://www.flickr.com/photos/kentbye/sets/72157601523153827/

node[shape=circle, color=white, style=solid];
node1;node2;node3;
这将定义一个节点(将其视为逐行评估文件时的“状态”),然后您可以在该“状态”中定义圆形节点,然后再切换到矩形节点。根据您的平台,您还可以导入.dot文件并对其进行微调以发布。此外,还有大量格式的生成器和转换器可用。请注意,如果您正在使用Mac OS X 10.7“Lion”,我尚未能够找到或构建Graphviz的工作版本。在这种情况下,我会说它还不适合您的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接