Graph 图中的位置和箭头方向
我正在尝试使用将一些真实的旧文档迁移到我们的内部wiki 我不习惯网络语言,需要一些帮助 请参见以下示例: 我做了很多实验,但迄今为止我得出的最好结果是:Graph 图中的位置和箭头方向,graph,graphviz,dot,directed-graph,Graph,Graphviz,Dot,Directed Graph,我正在尝试使用将一些真实的旧文档迁移到我们的内部wiki 我不习惯网络语言,需要一些帮助 请参见以下示例: 我做了很多实验,但迄今为止我得出的最好结果是: CentralPmr{ fontname=“Helvetica”; 形状=盒子; 节点[shape=box]; 图[样条线=正交] sg[label=“记录值的TTD存储组”] vc[label=“Value catalog”] tc1[label=“Time CatalogUE(1)”] tc2[label=“时间目录(2)”] sv_
CentralPmr{
fontname=“Helvetica”;
形状=盒子;
节点[shape=box];
图[样条线=正交]
sg[label=“记录值的TTD存储组”]
vc[label=“Value catalog”]
tc1[label=“Time CatalogUE(1)”]
tc2[label=“时间目录(2)”]
sv_[形状=点,宽度=0.01,高度=0.01];
sv[label=”“]
ie[shape=none,label=“始发事件”]
c1[shape=none,label=“由值目录定义的\n值集,该值从实际日志的TTD\n存储组中冻结。”]
c2[shape=none,label=“时间目录定义\n应该在什么时间收集\n初始化事件值。”]
sgf[shape=record,label=“{1 | 2 | 3 | 4 |..}{| | |}”
sg->sv_[penwidth=4,dir=none];
sv->sv->tc2[penwidth=4]
sv->sgf:f0[penwidth=4]
{vc,tc1}->sg
c1->sv[样式=虚线,箭头=“打开”];
{rank=min;ie}
{rank=same;sg c1}
{rank=same;vc sgf}
{rank=max;rc2}
}
它不必与来源完全相同,但我希望它是可以理解的
问题是:
我不确定我是否完全理解你想要什么,但在我的理解之下。这只是第一次尝试,可以做更多的微调。我可能会使用类似HTML的节点,其中文本和“框”需要更接近,特别是对于原始图形中的“PMR冻结值的TTD存储组” 我对你的问题的回答是: 如何将文本置于“价值目录”和“时间目录(1)”之间 ---见下文。我把它放在两个时间目录之间,如原始图表所示,但很容易移动 我如何强制记录箭头从侧面移动,而不是从上方移动 ---见下文。您还可以使用
rankdir=LR
更改方向(如果这是您的问题)
是否有可能从“始发事件”创建一条之字形线
---有很多方法,但需要付出很多努力(比如创建自定义形状)。据我所知,没有“开箱即用”的东西
如何在底部放置图例
我不太明白,但一般来说,当我们谈论节点时,答案是类似HTML的标签
她就是我所做的:
digraph CentralPmr
{
fontname="Helvetica";
shape=box;
node[shape=box];
graph [splines=ortho]
sg [label="TTD storage group for\nthe logged values"]
vc [label="Value catalogue"]
tc1 [label="Time catalogoue (1)"]
tc2 [label="Time catalogoue (2)"]
sv_ [shape=point,width=0.01,height=0.01];
sv [label="", width = 2]
ie [shape=none, label="Initiating event"]
c1 [shape=none, label="The set of values, defined\nby the value catalogue, which\nare freezed out of the TTD\nstorage group of the actual log."]
c2 [shape=none, label="Time catalogue defining\nat what time around the\ninitiating event values\nshould be collected."]
sgf [shape=record, label="{<f0> 1|2|3|4|..}|{ | | | | }"]
connector_1[ shape = point height = 0 width = 0 margin = 0 ]
ie -> connector_1[ style = dotted, arrowhead = none ];
{ rank = same; connector_1 c1 }
connector_1 -> c1[ style = invis ];
c1 -> sv[ style = dashed, arrowhead = open ];
connector_2[ shape = point height = 0 width = 0 margin = 0 ]
connector_1 -> connector_2[ style = dotted ];
{ rank = same; sg connector_2 sv }
sg -> connector_2[ minlen = 3, penwidth = 4, arrowhead = none ];
connector_2 -> sv[ minlen = 3, penwidth = 4 ];
vc -> tc1 -> c2 -> tc2[ style = invis, weight = 10 ];
sg -> vc;
sg -> tc1;
sv -> tc2[ penwidth = 4 ];
sv -> sgf;
}
有向图中心
{
fontname=“Helvetica”;
形状=盒子;
节点[shape=box];
图[样条线=正交]
sg[label=“记录值的TTD存储组”]
vc[label=“Value catalog”]
tc1[label=“Time CatalogUE(1)”]
tc2[label=“时间目录(2)”]
sv_[形状=点,宽度=0.01,高度=0.01];
sv[标签=”,宽度=2]
ie[shape=none,label=“始发事件”]
c1[shape=none,label=“由值目录定义的\n值集,该值从实际日志的TTD\n存储组中冻结。”]
c2[shape=none,label=“时间目录定义\n应该在什么时间收集\n初始化事件值。”]
sgf[shape=record,label=“{1 | 2 | 3 | 4 |..}{| | |}”
连接器1[形状=点高度=0宽度=0边距=0]
ie->connector_1[样式=虚线,箭头=无];
{rank=same;连接器_1 c1}
连接器1->c1[style=invi];
c1->sv[样式=虚线,箭头=打开];
连接器2[形状=点高度=0宽度=0边距=0]
连接器1->连接器2[样式=虚线];
{rank=same;sg连接器_2 sv}
sg->连接器2[minlen=3,penwidth=4,箭头=none];
连接器2->sv[minlen=3,penwidth=4];
vc->tc1->c2->tc2[style=invis,weight=10];
sg->vc;
sg->tc1;
sv->tc2[penwidth=4];
sv->sgf;
}
屈服
这是我第一个答案的顶部,编辑这个答案会造成太多的混乱。我已经试着将您的所有需求都考虑在内,只有在您放弃
spline=ortho
要求的情况下(我相信),它才会起作用。请参考我的第一个答案下面的评论。我们开始:
digraph CentralPmr {
fontname="Helvetica";
shape=box;
node[shape=box];
// graph [splines=ortho]
sg [label="TTD storage group for\nthe logged values", width = 2.5]
sv[ label="", width = 2]
ie [ shape=none, label="Initiating event", fontsize = 18 ]
c1 [ shape=none, label="The set of values, defined\nby the value catalogue, which\nare freezed out of the TTD\nstorage group of the actual log." ]
sgf[shape=box, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD BORDER="0" COLSPAN="2">TTD storage group for<BR/>PMR freezed values</TD>
</TR>
<TR>
<TD PORT="f1">1</TD>
<TD BORDER="0" ROWSPAN="6">The set of<BR/>values is<BR/>stored in<BR/>the TTD<BR/>storage<BR/>group</TD>
</TR>
<TR>
<TD>2</TD>
</TR>
<TR>
<TD>3</TD>
</TR>
<TR>
<TD>4</TD>
</TR>
<TR>
<TD>-</TD>
</TR>
<TR>
<TD>-</TD>
</TR>
<TR>
<TD BORDER="0" COLSPAN="2">Up to nine freezing areas<BR/>for defined central PMR</TD>
</TR>
</TABLE>>];
TTD [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="12">
<TR>
<TD PORT="f1">Value catalogue</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
</TR>
<TR>
<TD PORT="f2">Time catalogue (1)</TD>
</TR>
<TR>
<TD BORDER="0">Time catalogue defining<BR/>at what time around the<BR/>initiating event values<BR/>should be collected</TD>
</TR>
<TR>
<TD PORT="f3">Time catalogue (2)</TD>
</TR>
</TABLE>>];
connector_1[ shape = point height = 0 width = 0 margin = 0 ]
ie -> connector_1[ style = dotted, arrowhead = none ];
{ rank = same; connector_1 c1 }
connector_1 -> c1[ style = invis, minlen = 4 ];
c1 -> sv[ style = dashed, arrowhead = open ];
connector_2[ shape = point height = 0 width = 0 margin = 0 ]
connector_1 -> connector_2[ style = dotted ];
{ rank = same; sg connector_2 sv }
sg -> connector_2[ minlen = 3, penwidth = 4, arrowhead = none ];
connector_2 -> sv[ minlen = 3, penwidth = 4 ];
sg:sw -> TTD:f1:nw[ weight = 5 ];
sg:w -> TTD:f2:w;
sv:sw -> TTD:f3:e[ penwidth = 4 ];
sv:sw -> sgf:f1:w[ penwidth = 4 ];
node[ shape = plaintext ];
leg2[ label = "Data flow" ];
leg4[ label = "Reference" ];
leg6[ label = "Comment" ];
node [ shape = point height = 0 width = 0 margin = 0 ];
leg1 leg3 leg5
TTD:sw -> leg1[ style = invis ];
{ rank = same; leg1 leg2 leg3 leg4 leg5 leg6 }
edge[ minlen = 2 ];
leg1 -> leg2[ penwidth = 4 ];
leg3 -> leg4[ style = dotted ];
leg5 -> leg6[ style = dashed, arrowhead = open ];
}
CentralPmr{
fontname=“Helvetica”;
形状=盒子;
节点[shape=box];
//图[样条线=正交]
sg[label=“记录值的TTD存储组”,宽度=2.5]
sv[标签=”,宽度=2]
ie[shape=none,label=“始发事件”,fontsize=18]
c1[shape=none,label=“由值目录定义的\n值集,该值从实际日志的TTD\n存储组中冻结。”]
sgf[形状=框,边距=0,标签=<
PMR冻结值的TTD存储组
1.
值集存储在
TTD
存储
组中
2.
3.
4.
-
-
digraph CentralPmr {
fontname="Helvetica";
shape=box;
node[shape=box];
// graph [splines=ortho]
sg [label="TTD storage group for\nthe logged values", width = 2.5]
sv[ label="", width = 2]
ie [ shape=none, label="Initiating event", fontsize = 18 ]
c1 [ shape=none, label="The set of values, defined\nby the value catalogue, which\nare freezed out of the TTD\nstorage group of the actual log." ]
sgf[shape=box, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD BORDER="0" COLSPAN="2">TTD storage group for<BR/>PMR freezed values</TD>
</TR>
<TR>
<TD PORT="f1">1</TD>
<TD BORDER="0" ROWSPAN="6">The set of<BR/>values is<BR/>stored in<BR/>the TTD<BR/>storage<BR/>group</TD>
</TR>
<TR>
<TD>2</TD>
</TR>
<TR>
<TD>3</TD>
</TR>
<TR>
<TD>4</TD>
</TR>
<TR>
<TD>-</TD>
</TR>
<TR>
<TD>-</TD>
</TR>
<TR>
<TD BORDER="0" COLSPAN="2">Up to nine freezing areas<BR/>for defined central PMR</TD>
</TR>
</TABLE>>];
TTD [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="12">
<TR>
<TD PORT="f1">Value catalogue</TD>
</TR>
<TR>
<TD BORDER="0"></TD>
</TR>
<TR>
<TD PORT="f2">Time catalogue (1)</TD>
</TR>
<TR>
<TD BORDER="0">Time catalogue defining<BR/>at what time around the<BR/>initiating event values<BR/>should be collected</TD>
</TR>
<TR>
<TD PORT="f3">Time catalogue (2)</TD>
</TR>
</TABLE>>];
connector_1[ shape = point height = 0 width = 0 margin = 0 ]
ie -> connector_1[ style = dotted, arrowhead = none ];
{ rank = same; connector_1 c1 }
connector_1 -> c1[ style = invis, minlen = 4 ];
c1 -> sv[ style = dashed, arrowhead = open ];
connector_2[ shape = point height = 0 width = 0 margin = 0 ]
connector_1 -> connector_2[ style = dotted ];
{ rank = same; sg connector_2 sv }
sg -> connector_2[ minlen = 3, penwidth = 4, arrowhead = none ];
connector_2 -> sv[ minlen = 3, penwidth = 4 ];
sg:sw -> TTD:f1:nw[ weight = 5 ];
sg:w -> TTD:f2:w;
sv:sw -> TTD:f3:e[ penwidth = 4 ];
sv:sw -> sgf:f1:w[ penwidth = 4 ];
node[ shape = plaintext ];
leg2[ label = "Data flow" ];
leg4[ label = "Reference" ];
leg6[ label = "Comment" ];
node [ shape = point height = 0 width = 0 margin = 0 ];
leg1 leg3 leg5
TTD:sw -> leg1[ style = invis ];
{ rank = same; leg1 leg2 leg3 leg4 leg5 leg6 }
edge[ minlen = 2 ];
leg1 -> leg2[ penwidth = 4 ];
leg3 -> leg4[ style = dotted ];
leg5 -> leg6[ style = dashed, arrowhead = open ];
}