2012-11-29 70 views
6

NetworkX包含functions,用於使用matplotlib繪製圖表。這是使用大IPython的筆記本(開始ipython3 notebook --pylab inline)的例子:如何更改networkx/matplotlib圖形繪圖的屬性?

enter image description here

尼斯,一開始。但是,我如何影響圖畫的屬性,如着色,線條寬度和標籤?我以前沒有使用過matplotlib。

+0

的http:// networkx.lanl.gov/reference/drawing.html - 你想要'draw_networkx_edges'和'draw_networkx_nodes'功能 – job

回答

11

IPython是查找什麼功能(和對象)可以做的很好的工具。如果您鍵入

[1]: import networkx as nx 
[2]: nx.draw? 

你看到

定義:nx.draw(G,POS =無,AX =無,按住=無,** kwds)

**kwds: optional keywords 
    See networkx.draw_networkx() for a description of optional keywords. 

如果你因此輸入

[10]: nx.draw_networkx? 

你會看到

node_color: color string, or array of floats 
edge_color: color string, or array of floats 
width: float 
    Line width of edges (default =1.0) 
labels: dictionary 
    Node labels in a dictionary keyed by node of text labels (default=None) 

所以,有了這些信息,以及實驗位的武裝,這是不難得出處:

import matplotlib.pyplot as plt 
import numpy as np 
import networkx as nx 
import string 

G = nx.generators.erdos_renyi_graph(18, 0.2) 
nx.draw(G, 
     node_color = np.linspace(0,1,len(G.nodes())), 
     edge_color = np.linspace(0,1,len(G.edges())), 
     width = 3.0, 
     labels = {n:l for n,l in zip(G.nodes(),string.ascii_uppercase)} 
     ) 
plt.show() 

這將產生

enter image description here

+1

謝謝。我必須試驗一下。我特別感興趣的是將邊權重映射到線寬。 – clstaudt

+3

爲了有可變的線寬,我認爲你需要爲每個寬度調用一次'nx.draw_networkx_edges'。有關示例,請參閱[這裏](http://networkx.lanl.gov/examples/drawing/weighted_graph.html)。在那裏他們改變線條樣式,但它顯示了你也可以改變寬度的位置。 – unutbu

+0

太棒了,你不僅回答了問題,而且解釋瞭如何獲得答案。 – Lukas