11

我想创建一个如下图所示的图表......但是太复杂了。我想为每个方形节点使用单独的图像,为每个圆形节点使用相同的图像。

我想知道使用 GraphViz 是最佳选择还是有其他选择?

另外,我想知道我是否可以在 GraphViz 中为圆圈一创建一个模板节点并重用它?我不想一次又一次地指定图像、形状等属性。

示例图

4

2 回答 2

15

当然,这是在您的问题中绘制图形的代码(如下所示,由点呈现)。

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. 第一行有向图用于有向图(用于边有方向的图)。

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

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

  4. 默认情况下,节点名称(例如,我图中的 a、b、c)用作节点的标签。如果您不希望在渲染图中显示此内容,只需设置label=""

在此处输入图像描述

于 2011-09-24T07:21:23.707 回答
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 的工作版本。在这种情况下,我会说它还不适合您的需求。

于 2011-09-24T07:20:42.337 回答