Graph 图中的位置和箭头方向

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_

我正在尝试使用将一些真实的旧文档迁移到我们的内部wiki

我不习惯网络语言,需要一些帮助

请参见以下示例:

我做了很多实验,但迄今为止我得出的最好结果是:

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}
}
它不必与来源完全相同,但我希望它是可以理解的

问题是:

  • 如何将文本置于“价值目录”和“时间目录(1)”之间
  • [编辑]如何强制箭头从侧面指向“TTD存储组用于PMR冻结值”,而不是从上面?它是内存区域的虚拟化,箭头指向特定的内存柱。在其他图像中,它可以指向存储区域中的其他存储柱(例如2、3、4..)
  • 是否有可能从“始发事件”创建一条之字形线
  • 如何在底部放置图例来解释不同类型的线条
  • [编辑]如何在“PMR冻结值的TTD存储组”的上方、下方和右侧添加注释
  • [编辑]如何扩大“PMR冻结值的TTD存储组”
    我不确定我是否完全理解你想要什么,但在我的理解之下。这只是第一次尝试,可以做更多的微调。我可能会使用类似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 ];
    }