如何在圆(形状)内嵌套点(形状)?

时间:2015-01-05 20:44:25

标签: graphviz petri-net

我很乐意去: enter image description here

我在这样的图表上尝试变体:

digraph G {
    node [shape=circle penwidth=2 fixedsize=true label=""]
    token [shape=point ]
    place [ xlabel="P2" _background="digraph G { e[shape=point ] }"]
}

this online form中可测试导致:

enter image description here

如何在圆圈内放置一个圆点(tokenplace

2 个答案:

答案 0 :(得分:0)

Graphviz程序通常不喜欢有意将节点放置在其他节点之上,但是在特殊情况下允许它- neato -n neato -n2 允许它(请参阅常见问题解答。 enter image description here

我在此输入文件中添加了新属性(点):

digraph G {
    node [shape=circle penwidth=2  label=""]
    n1 [ xlabel="P1" dotme=1]
    n2 [ xlabel="P2" ]
    n3 [ xlabel="P3" dotme=1]
  
    n1 -> n2
    n1 -> n3
    n2 -> n3
}

然后通过这套Graphviz程序运行它:

dot -Tdot needsadot.gv |gvpr -c -fdotMe.gvpr |neato -n2 -Tpng >needsadot.png

gvpr程序dotMe.gvpr在此处:

BEGIN {

  int nxt=0;

}
N {
  int i;
  string str1, str2;
  node_t n;

  if (hasAttr($, "dotme")){
    if (strcmp($.dotme,"1")==0){
      // create a new node and position it on top of existing node
      str1=sprintf("__dot_%d", ++nxt);
      n=node($G, str1);
      n.pos=$.pos;
      n.shape="point";
    }
  }
}

dotMe.gvpr 在dotme == 1的每个节点的上方(相同 pos )添加一个新节点。
令人费解,但可重用。

答案 1 :(得分:0)

阿尔伯特的想法(使用unicode符号)效果很好(使用点大小来更改点大小):

digraph G {
    node [shape=circle penwidth=2  label=""]
    n1 [ xlabel="P1" label=<<font point-size="8">&#9899;</font>>]
    n2 [ xlabel="P2" ]
    n3 [ xlabel="P3" label=<<font point-size="6">&#9899;</font>>]
  
    n1 -> n2
    n1 -> n3
    n2 -> n3
}

给出以下内容: enter image description here