我想创建一个如下图所示的图表......但是太复杂了。我想为每个方形节点使用单独的图像,为每个圆形节点使用相同的图像。
我想知道使用GraphViz是最佳选择还是有其他选择?
另外,我想知道我是否可以在GraphViz中为圆圈创建模板节点并重复使用它?我不想一次又一次地指定图像,形状等属性。
答案 0 :(得分:12)
当然,这是在你的问题中绘制图形的代码(下面用点显示的代码)。
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;
}
第一行 有向图 用于有向图(适用于图表) 边缘有方向)。
第四个和第五个位于上面设置边和的默认属性 节点,分别。换句话说,一旦你完成了这个,你就是 需要样式(包括属性+值)节点(或边缘) 您希望样式与默认值不同。你可以有 通过创建子图或离散的多个节点“模板” 组节点(参见dot手册)。
rank = same 允许您指定一组具有相同节点的节点 垂直位置(提供 rankdir 设置为 TB ,这意味着 “顶部 - 底部”)。
默认情况下,节点名称(例如,我的图中的a,b,c)用作 节点的标签。如果您不希望在渲染图中显示此信息, 只需设置 label =“”
答案 1 :(得分:8)
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的工作版本。在这种情况下,我会说它不适合您的需求。