graphViz:如何为节点分配多种颜色

时间:2013-07-12 02:02:37

标签: graphviz

我想为graphViz中的节点分配多种颜色。最佳解决方案是圆形节点,饼图格式。

我知道一种方法是使用HTML标记。以下是一个简单的例子:

graph G{
    1--2;
    1[shape=none,margin=0,label=< 
    <table BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> 
        <tr>
            <td bgcolor="red"></td>
            <td bgcolor="blue"></td>
        </tr>   
     </table>         >];
    2[shape=circle,style=filled,fillcolor=yellow];
    3[shape=circle,style=filled,fillcolor=yellow];
}

然而,存在一些问题:

  1. 节点1没有标签(我希望它有标签“1”)

  2. 连接节点1到节点2的边缘没有完全连接到节点1.换句话说,节点1和连接节点2的边缘之间有一个空格。

  3. 节点1是矩形的。我怎么能有一个圆形节点?

  4. 如果无法克服这些问题,请您推荐其他图形可视化软件吗?

2 个答案:

答案 0 :(得分:3)

您可以通过

实现这一目标
graph G{
    1--2;
    1[shape=circle,style=wedged,fillcolor="red:blue"];
    2[shape=circle,style=filled,fillcolor=yellow];
    3[shape=circle,style=filled,fillcolor=yellow];
}

该方法的优点是您可以在节点中使用2种以上的颜色。

答案 1 :(得分:0)

对于您的第一个问题,它实际上取决于您对双色节点的实现。您有这篇文章中描述的多个解决方案:Two colours in one node with graphviz's dot?使用您当前的代码,添加标签的最简单方法是将其写入<td></td>标记内,如下面的代码所示:

graph G{
    1--2;
    1[shape=none,margin=0,label=< 
    <table BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> 
        <tr>
            <td bgcolor="red">1</td>
            <td bgcolor="blue"></td>
        </tr>   
     </table>         >];
    2[shape=circle,style=filled,fillcolor=yellow];
    3[shape=circle,style=filled,fillcolor=yellow];
}

但是,它不会居中,我认为渐变节点是可取的。

对于第二个问题,您需要在数组的单元格上声明一个端口,并在绘制边缘时使用它们来锚定边缘:

graph G{
    1[shape=none, label=< 
    <table MARGIN="0" BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> 
        <tr>
            <td bgcolor="red" port="L">1</td>
            <td bgcolor="blue" port="R"></td>
        </tr>   
     </table>         >];
    2[shape=circle,style=filled,fillcolor=yellow];
    3[shape=circle,style=filled,fillcolor=yellow];
    1:L--2;
}

对于您的第3个问题,根据http://www.graphviz.org/doc/info/shapes.html,您可以创建自定义形状。我不知道有什么方法可以创建这样的圆形数组,所以你应该朝这个方向看。我想。