如何绘制双色边缘?

时间:2018-07-28 16:44:37

标签: python colors graphviz

我目前正在尝试用Graphviz表示一个图形,其中的边缘有2种颜色。理想情况下,我想将每个边缘切成两半,每种颜色分别上色一半。

另一个限制是我必须使用RGB编码,例如color="#4a52ff"。我不能使用color="black"方式。

我尝试用:分隔颜色标签,但获得的结果是双重优势。

这是一个最小的示例:

import graphviz as gv

color1, color2 = "#3f7f3f", "#ff7f3f"
g = gv.Graph(format="png")
g.node("1", color=color1)
g.node("2", color=color2)
g.edge("1", "2", color="%s:%s" % (color1, color2))
g.render("tmp", view=True)

我获得了一个带有2个节点和1个边的小图,但是单个边似乎被加倍了,每种颜色都有一个版本。 我想要的是一个橙色端,连接到橙色节点,另一个绿色端连接到绿色节点。

Obtained graph

2 个答案:

答案 0 :(得分:2)

我可以通过在两者之间引入一个节点来最接近您想要的:

graph g
{
mid [shape=point ];
node1 [ color = "#3f7f3f"];
node2 [ color = "#ff7f3f"];
node1 -- mid [ color= "#3f7f3f"];
mid -- node2 [color = "#ff7f3f"];
}

这将产生与您描述的结果类似的结果:

enter image description here

现在,我仅使用GraphViz,而您使用的是python版本,但是这里的关键(如果您选择使用它)是中间节点,其他节点的颜色都可以到达它。

答案 1 :(得分:2)

Node, Edge and Graph Attributes - color页上,如果指定分数,则Graphviz支持边缘的着色。

  

这支持绘制相对边的常见情况,但是使用平行样条线而不是单独布线的多边。如果使用任何分数,则会按顺序绘制颜色,每种颜色都大致指定为其指定的边缘分数。

根据您的情况,更改以下行:

g.edge("1", "2", color="%s:%s" % (color1, color2))

收件人:

 g.edge("1", "2", color="%s;%f:%s" % (color1, 0.5, color2))

它呈现如下:

enter image description here