2012-04-22 84 views
1

我想建立一个有向图和订阅边。python建立图与笔记

import os 
import scipy as sc 
import pylab 
import networkx 
import matplotlib.pyplot as plt 
from networkx import * 
from numpy import * 

G=networkx.DiGraph() 
R=[('S0','S1'),('S1','S2'),('S1','S7'),('S2','S3'),('S2','S6'),('S3','S4'),('S3','S6'),('S4','S5'),('S5','S6'),('S6','S7'),('S7','S8'),('S7','S5'),('S8','Sk') ] 

G.add_edges_from([ (2,3,) ]) 
G.add_edges_from(R) 
networkx.draw_circular(G) 

plt.show() 
plt.savefig("path.png"); 

现在我已经这样做了。我建立了一个图表,但我无法想象如何订阅边缘。例如,我想要标记S0S1边缘像"565"等,这将使其视觉效果更佳,demostrative。 在此先感谢!

enter image description here

回答

3

相反布点更多的选择,并在一个单一的步骤(networkx.draw_circular(G)),您可在绘制布局并分别绘制节点,边缘,节点标签和边缘标签。这里有一个小例子:

import networkx as nx 
import matplotlib.pyplot as plt 

G=nx.DiGraph() 
R=[('S0','S1'),('S1','S2'),('S1','S7'),('S0','S7')] 

G.add_edges_from(R) 

# Calculate layout and get all positions 
pos = nx.circular_layout(G) 

# Draw everything 
nx.draw_networkx_nodes(G, pos) 
nx.draw_networkx_edges(G, pos) 
nx.draw_networkx_labels(G, pos) 
nx.draw_networkx_edge_labels(G, pos, 
    { 
     ('S0', 'S1'): 'edge1', 
     ('S1', 'S2'): 'edge2', 
     ('S1', 'S7'): 'edge3', 
     ('S0', 'S7'): 'edge4' 
    } 
) 

plt.axis('off') 
plt.savefig("path.png"); 
plt.show() 

有关哪些参数可以传递给不同的绘图功能,check the documentation更多信息。

+0

hm。我也应该考虑你的解决方案。你做得比我好。所以+你 – Tebe 2012-04-22 13:03:45

1

好,我想这样做:enter image description here ,我做到了。即我想标记边缘。这似乎很简单,但事实并非如此。真。

完整的图像是在这里http://s019.radikal.ru/i603/1204/2a/921bc6badfae.png

import os 
import scipy as sc 
import pylab 
import networkx 
import matplotlib.pyplot as plt 
from networkx import * 
from numpy import * 

G=networkx.DiGraph() 
R=[('S0','S1'),('S1','S2'),('S1','S7'),('S2','S3'),('S2','S6'),('S3','S4'),('S3','S6'),('S4','S5'),('S5','S6'),('S6','S7'),('S7','S8'),('S7','S5'),('S8','Sk') ] 
G.add_edges_from(R) 
label={R[1]:'a',R[2]:'b',R[3]:'c'} 
networkx.draw_networkx_edge_labels(G,pos=networkx.graphviz_layout(G),edge_labels=label) 
networkx.draw_graphviz(G) 
plt.show() 
plt.savefig("path.png");