关于python:networkx:在边缘绘制文本

networkx: Draw text on edges

在我的论文中,我需要绘制一些概率控制流程图。即控制流程图,边缘描绘概率。

我发现图形工具似乎非常有用,因为它可以使用现有图形的深度副本,而我的图形非常相似。

所以我的问题是,是否有可能在边上/边旁边绘制边属性(或一些字符串)?如果不可能或非常复杂,有没有更好的工具可以在这种情况下使用?

编辑:我需要能够在两个节点之间创建循环并具有不同值的定向边。这也有可能吗?所以我可以看到这两种价值观?到目前为止,我可以看到有向图,它有两个方向的边,但上面只有一个值。

例如,在networkx中(指hooked),它看起来像:

1
2
3
4
G = nx.MultiDiGraph()
G.add_edge(0,1)
G.add_edge(1,0)
labels = {(0,1):'foo', (1,0):'bar'}

这样"foo"和"bar"都是可见的,您可以看到它们连接的方向。

但是当networkx呈现它时,我得到了1个带有1个标签的双向边缘。


下一步,你可以绘制文本和图形的边缘,利用边缘_文本"工具选项"绘图_()函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from graph_tool.all import *

g = Graph()
g.add_vertex(4)
label = g.new_edge_property("string")
e = g.add_edge(0, 1)
label[e] ="A"
e = g.add_edge(2, 3)
label[e] ="foo"
e = g.add_edge(3, 1)
label[e] ="bar"
e = g.add_edge(0, 3)
label[e] ="gnat"

graph_draw(g, edge_text=label, edge_font_size=40, edge_text_distance=20, edge_marker_size=40, output="output.png")

enter image description here


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import networkx as nx  

# Sample graph
G = nx.Graph()
G.add_edge(0,1)
G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(1,3)

labels = {(0,1):'foo', (2,3):'bar'}

pos=nx.spring_layout(G)

nx.draw(G, pos)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels,font_size=30)

import pylab as plt
plt.show()

enter image description here

编辑:如果你需要multidigraphs与边缘的标签,我不认为你可以在这networkx完全。然而,你可以在Python和它的大部分的渲染和布局与另一个计划:

1
2
3
4
5
6
7
8
import networkx as nx

G = nx.MultiDiGraph()
G.add_edge(0,1, label='A')
G.add_edge(1,0, label='B')
G.add_edge(2,3, label='foo')
G.add_edge(3,1, label='bar')  
nx.write_dot(G, 'my_graph.dot')

我用一把,这对图像的图像。在我的第一本从机运行UNIX命令行

1
dot my_graph.dot -T png > output.png

这使你在寻找所需的输出。注意到有许多方式自定义图像的视觉外观。上述简单的例子:produces

enter image description here