在GraphViz中制作图例/键
我想在我的GraphViz图表中包括图例或键。不过,我很难弄清楚要使用什么代码。我还想把它放在一个角落里,但我唯一能确定的坐标是左下角:在GraphViz中制作图例/键,graphviz,legend,Graphviz,Legend,我想在我的GraphViz图表中包括图例或键。不过,我很难弄清楚要使用什么代码。我还想把它放在一个角落里,但我唯一能确定的坐标是左下角:pos=“10,10!” 有人知道我如何让它工作吗?我深信graphviz不应该以这种方式使用,但您可以使用来实现您想要的: digraph { Foo -> Bar -> Test; Foo -> Baz -> Test; { rank = sink; Legend [shape=none, margin=0, labe
pos=“10,10!”
有人知道我如何让它工作吗?我深信graphviz不应该以这种方式使用,但您可以使用来实现您想要的:
digraph {
Foo -> Bar -> Test;
Foo -> Baz -> Test;
{ rank = sink;
Legend [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD COLSPAN="2"><B>Legend</B></TD>
</TR>
<TR>
<TD>Foo</TD>
<TD><FONT COLOR="red">Foo</FONT></TD>
</TR>
<TR>
<TD>Bar</TD>
<TD BGCOLOR="RED"></TD>
</TR>
<TR>
<TD>Baz</TD>
<TD BGCOLOR="BLUE"></TD>
</TR>
<TR>
<TD>Test</TD>
<TD><IMG src="so.png" SCALE="False" /></TD>
</TR>
<TR>
<TD>Test</TD>
<TD CELLPADDING="4">
<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD BGCOLOR="Yellow"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
>];
}
}
导致:
digraph {
rankdir=LR
node [shape=plaintext]
subgraph cluster_01 {
label = "Legend";
key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td align="right" port="i1">item 1</td></tr>
<tr><td align="right" port="i2">item 2</td></tr>
<tr><td align="right" port="i3">item 3</td></tr>
<tr><td align="right" port="i4">item 4</td></tr>
</table>>]
key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td port="i1"> </td></tr>
<tr><td port="i2"> </td></tr>
<tr><td port="i3"> </td></tr>
<tr><td port="i4"> </td></tr>
</table>>]
key:i1:e -> key2:i1:w [style=dashed]
key:i2:e -> key2:i2:w [color=gray]
key:i3:e -> key2:i3:w [color=peachpuff3]
key:i4:e -> key2:i4:w [color=turquoise4, style=dotted]
}
...
有向图{
rankdir=LR
节点[形状=纯文本]
子图簇_01{
label=“图例”;
键[label=]
键2[label=]
键:i1:e->键2:i1:w[样式=虚线]
键:i2:e->键2:i2:w[颜色=灰色]
key:i3:e->key2:i3:w[color=peachpuff3]
键:i4:e->键2:i4:w[颜色=绿松石色4,样式=虚线]
}
...
我使用的是点如果使用图形[Spline=ortho],则会出现一些问题:线的顺序是相反的 点源:
digraph {
rankdir=LR
node [shape=plaintext]
graph [splines=ortho]
subgraph cluster_01 {
label = "Legend";
key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td align="right" port="i1">item 1</td></tr>
<tr><td align="right" port="i2">item 2</td></tr>
<tr><td align="right" port="i3">item 3</td></tr>
<tr><td align="right" port="i4">item 4</td></tr>
<tr><td align="right" port="i5">item 5</td></tr>
</table>>]
key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0">
<tr><td port="i1" bgcolor='greenyellow'> </td></tr>
<tr><td port="i2"> </td></tr>
<tr><td port="i3"> </td></tr>
<tr><td port="i4"> </td></tr>
<tr><td port="i5"> </td></tr>
</table>>]
key:i1:e -> key2:i1:w [color=red]
key:i2:e -> key2:i2:w [color=gray]
key:i3:e -> key2:i3:w [color=peachpuff3]
key:i4:e -> key2:i4:w [color=turquoise4, style=dotted]
key:i5:e -> key2:i5:w [color=red, style=dotted]
}
}
有向图{
rankdir=LR
节点[形状=纯文本]
图[样条线=正交]
子图簇_01{
label=“图例”;
键[label=]
键2[label=]
键:i1:e->键2:i1:w[颜色=红色]
键:i2:e->键2:i2:w[颜色=灰色]
key:i3:e->key2:i3:w[color=peachpuff3]
键:i4:e->键2:i4:w[颜色=绿松石色4,样式=虚线]
键:i5:e->键2:i5:w[颜色=红色,样式=虚线]
}
}
我在以下方面有点运气。我不喜欢它有多宽,但在其他方面它工作正常
subgraph cluster1 {
label = "Legend" ;
shape = rectangle ;
color = black ;
a [style=invis] ;
b [style=invis] ;
c [style=invis] ;
d [style=invis] ;
c -> d [label="only ts", style=dashed, fontsize=20] ;
a -> b [label="ts and js", fontsize=20] ;
gui -> controller [style=invis] ;
view -> model [style=invis] ;
builtins -> utilities [style=invis] ;
gui [style=filled, fillcolor="#ffcccc"] ;
controller [style=filled, fillcolor="#ccccff"] ;
view [style=filled, fillcolor="#ccffcc"] ;
model [style=filled, fillcolor="#ffccff"] ;
builtins [style=filled, fillcolor="#ffffcc"] ;
utilities ;
"external libraries" [shape=rectangle] ;
}
结果是
我也在尝试这样做。我一直在使用子图生成节点类型的键:
digraph G {
rankdir=RL;
graph [fontsize=10 fontname="Verdana"];
node [style=filled height=0.55 fontname="Verdana" fontsize=10];
subgraph cluster_key {
label="Key";
progress [fillcolor="wheat" label="In progress"];
todo [label="To do"];
done [fillcolor=palegreen3 label="Done"];
not_our [fillcolor=none label="Not our\nteam"];
numbers [color=none label="Numbers\nrepresent\nperson\ndays"];
progress -> done [style=invis];
todo -> progress [style=invis];
not_our -> todo [style=invis];
numbers -> not_our [style=invis];
}
mappings [fillcolor=palegreen3];
identifiers [fillcolor=palegreen3];
hyperwarp [fillcolor=wheat];
ghost [fillcolor=none]
UI [fillcolor=none]
events [fillcolor=wheat];
flag [fillcolor=palegreen3];
groups [fillcolor=wheat];
types [fillcolor=wheat];
instances [];
resources [];
optimize [];
remove_flag [];
persist [];
approval [];
edge [style="" dir=forward fontname="Verdana" fontsize=10];
types -> flag;
groups -> events;
events -> {flag mappings identifiers};
ghost -> hyperwarp;
UI -> ghost;
resources -> identifiers;
optimize -> groups;
hyperwarp -> flag;
instances -> {ghost UI types events hyperwarp flag};
resources -> {groups flag};
remove_flag -> approval;
persist -> approval;
approval -> {types resources instances};
}
导致
但是经过思考,看到我必须将图例放置在主图表旁边的困难,主图表中节点排名的位置影响图例中节点排名的方式,以及这引入的源代码的复杂性,我尝试了另一种方法(参见我的另一个答案,使用单独的图表作为键)在尝试了几种在主GraphViz图像中嵌入密钥的方法后,我决定,对我来说,更合理的做法是将图例放入自己的单独点文件中,将其呈现为自己的单独图像,然后在文档/页面中并排显示图像 这有几个优点:
源代码要简单得多.dot
- 更改图例图的rankdir可以很容易地将节点显示在彼此的上方,或并排显示,以生成一个位于主图像右侧或其下方的关键点
- 没有泄漏的东西,如排名位置从主图表到传奇
就布局而言,这看起来不错,但它需要手动输入表中的每个项目,而不是使用现有的节点对象。我尝试使用子图和集群,但两者都不足以可靠地控制表的布局(我知道引擎负责决定普通图形的最佳布局,但表格很容易进行最佳布局,不需要复杂的计算;矩形足够简单)。我不知道图例必须由节点组成-我用一个示例更新了响应,但没有成功,至少如果你需要网格线的话。我不认为你想要得到的是可能的,即使是通过奇特的计算。其他工具可能更适合该任务。>我不知道图例必须由节点组成图例是关于图形的,图形是由节点和线组成的。>我不认为您希望获得的是可能的,即使是通过奇特的计算。其他工具可能更适合该任务。这将是不幸的;奇怪的是,图形工具不能提供gr的关键部分(这将是一个有用的附录来列举为什么你深信这不应该做。奇怪的是,我得到了
dot
(其他人更糟)。@Synetech,我使用的是GraphViz 2.28(如果有关系的话)。在您的图表中出现key2
似乎有些奇怪。可能是这样;我正在使用2.26.3。我将尝试最新版本。@Synetech,仅供参考,我在运行2.26.3的Windows7 PC上尝试了此功能,并重现了key2
问题。我更新了该PC(版本为2.30.1),现在它可以工作了。它对我有效,但我必须添加“{rank=same;key,key2}“强制两端位于同一列上。没有这个,我就有了看起来很滑稽的箭头。在子图之前使用spline=true;
取消spline=ortho;
digraph G {
rankdir=RL;
graph [fontsize=10 fontname="Verdana"];
node [style=filled height=0.55 fontname="Verdana" fontsize=10];
subgraph cluster_key {
label="Key";
progress [fillcolor="wheat" label="In progress"];
todo [label="To do"];
done [fillcolor=palegreen3 label="Done"];
not_our [fillcolor=none label="Not our\nteam"];
numbers [color=none label="Numbers\nrepresent\nperson\ndays"];
progress -> done [style=invis];
todo -> progress [style=invis];
not_our -> todo [style=invis];
numbers -> not_our [style=invis];
}
mappings [fillcolor=palegreen3];
identifiers [fillcolor=palegreen3];
hyperwarp [fillcolor=wheat];
ghost [fillcolor=none]
UI [fillcolor=none]
events [fillcolor=wheat];
flag [fillcolor=palegreen3];
groups [fillcolor=wheat];
types [fillcolor=wheat];
instances [];
resources [];
optimize [];
remove_flag [];
persist [];
approval [];
edge [style="" dir=forward fontname="Verdana" fontsize=10];
types -> flag;
groups -> events;
events -> {flag mappings identifiers};
ghost -> hyperwarp;
UI -> ghost;
resources -> identifiers;
optimize -> groups;
hyperwarp -> flag;
instances -> {ghost UI types events hyperwarp flag};
resources -> {groups flag};
remove_flag -> approval;
persist -> approval;
approval -> {types resources instances};
}
subgraph cluster_01 {
label = "Legend";
node [shape=point]
{
rank=same
d0 [style = invis];
d1 [style = invis];
p0 [style = invis];
p1 [style = invis];
s0 [style = invis];
s1 [style = invis];
}
d0 -> d1 [label=deprecated style=dashed]
p0 -> p1 [label=proposed style=dotted]
s0 -> s1 [label=stable]
}