如何在GraphViz中为基于记录的节点设置端口样式?

6

我正在使用这个简单的输入脚本,定义了基于记录的节点,并将其提供给 dot 以创建一个 SVG(实际上 SVG 部分并不重要):

graph mygraph{
  node [shape=record, fontsize=10, fontname=Arial];
  rankdir=TB;
  ranksep=0.5;
  rank=max;
  splines=true;
  overlap=false;
  mindist=0.2;
  "d1" [style=solid, label="{\N|{<0> 0|<1> 1}}"];
  "d2" [style=solid, label="{\N|{<0> 0|<1> 1|<2> 2|<3> 3}}"];
  "d1":0 -- "d2":0[color=blue, penwidth=3, tooltip="d1:0 -- d2:0", URL="#"];
}

这将生成一个图形,其中d1的端口0和d2的端口0由蓝色样条线连接:

dot result

很好。

现在我需要对端口进行着色。例如:d2的端口1应为绿色,d2的端口2应为橙色。或者其他颜色。

我该如何实现?


编辑1:节点周围的实线框架很重要。对于某些节点,我需要它是实线,对于其他节点,我需要它是虚线。


1个回答

9

类似HTML的标签可以让你在格式化标签时具有很大的灵活性。下面是代码:

graph mygraph{
  node [shape=record, fontsize=10, fontname=Arial];
  rankdir=TB;
  ranksep=0.5;
  rank=max;
  splines=true;
  overlap=false;
  mindist=0.2;
  d1 [shape=none, margin=0, label=<
    <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
        <tr><td colspan="2">d1</td></tr>
        <tr><td port="0">0</td><td>1</td></tr>
    </table>>];
  d2 [shape=none, margin=0, label=<
    <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
        <tr><td colspan="4">d2</td></tr>
        <tr><td port="0">0</td><td bgcolor="green">1</td><td bgcolor="orange">2</td><td>3</td></tr>
    </table>>];
  d1:0 -- d2:0[color=blue, penwidth=3, tooltip="d1:0 -- d2:0", URL="#"];
}

生成以下图表:

enter image description here

请注意使用port属性来标识端口。


看起来很有前途。为什么D2的0号端口比其他端口宽?或者我错了吗? - eckes
你是对的。我将它渲染成PDF并放大了,它的宽度增加了边框的宽度。 - SSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接