[英]networkx: Draw text on edges
對於我的論文,我需要繪制一些概率控制流程圖。 即控制流程圖,邊緣上描繪的概率。
我發現圖形工具看起來非常有用,因為它可以使用現有圖形的深層復制,我的圖形非常相似。
所以我的問題是,如果有可能在邊緣上/旁邊繪制邊緣屬性(或一些字符串)? 如果它不可能或非常復雜,那么在這種情況下是否有更好的工具?
編輯:我需要有向邊,甚至可以在2個節點之間創建循環並具有不同的值。 這也有可能嗎? 所以我可以看到兩個值? 到現在為止,我可以看到帶有雙向邊的有向圖,但它只有一個值。
因此,例如在networkx中(參考Hooked),它看起來像:
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個標簽的雙向邊緣。
您可以使用graph_ tool使用graph_draw()函數的“edge_text”選項在邊緣旁邊繪制文本:
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")
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()
編輯:如果你需要帶有邊緣標簽的networkx
,我認為你不能在networkx
完全做到這networkx
。 但是你可以在python中完成大部分工作,並使用另一個程序進行渲染和布局:
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')
我使用graphviz將其轉換為圖像。 在我的Unix機器上,我從命令行運行它
dot my_graph.dot -T png > output.png
這提供了您正在尋找的所需輸出。 請注意,graphviz有許多方法可以自定義視覺外觀 。 上面的例子簡單地產生:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.