【发布时间】:2011-11-24 03:38:48
【问题描述】:
我想创建一个如下图所示的图表...但是太复杂了。我想为每个方形节点使用单独的图像,为每个圆形节点使用相同的图像。
我想知道使用 GraphViz 是最佳选择还是有其他选择?
另外,我想知道我是否可以在 GraphViz 中为圆圈一创建一个模板节点并重用它?我不想一次又一次地指定图像、形状等属性。
【问题讨论】:
标签: graph graphviz graph-visualization
我想创建一个如下图所示的图表...但是太复杂了。我想为每个方形节点使用单独的图像,为每个圆形节点使用相同的图像。
我想知道使用 GraphViz 是最佳选择还是有其他选择?
另外,我想知道我是否可以在 GraphViz 中为圆圈一创建一个模板节点并重用它?我不想一次又一次地指定图像、形状等属性。
【问题讨论】:
标签: graph graphviz graph-visualization
当然,这是在您的问题中绘制图表的代码(如下所示,由点呈现)。
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;
}
第一行 digraph 用于 有向图(用于 边有方向)。
第四个和第五个在上面设置边缘的默认属性和 节点,分别。换句话说,一旦你这样做了,你只 需要样式(包括属性+值)节点(或边) 您想要与默认值不同的样式。你可以有 通过创建子图或离散的多个节点“模板” 对节点进行分组(参见 dot 手册)。
rank=same 允许您指定一组具有相同 垂直位置(假设 rankdir 设置为 TB,这意味着 “从上到下”)。
默认情况下,节点名称(例如,我图中的 a、b、c)用作 节点的标签。如果您不希望在渲染图中显示此内容, 只需设置 label=""
【讨论】:
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 的工作版本。在这种情况下,我会说它还不适合您的需求。
【讨论】: