簡體   English   中英

networkx:在邊緣繪制文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM