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") |
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() |
编辑:如果你需要multidigraphs与边缘的标签,我不认为你可以在这
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