使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程
最近因?yàn)閿?shù)學(xué)建模3天速成Python,然后做了一道網(wǎng)絡(luò)的題,要畫網(wǎng)絡(luò)圖。在網(wǎng)上找了一些,發(fā)現(xiàn)都是一些很基礎(chǔ)的丑陋紅點(diǎn)圖,并且關(guān)于網(wǎng)絡(luò)的一些算法也沒(méi)有講,于是自己進(jìn)http://networkx.github.io/學(xué)習(xí)了一下。以下僅博主自己的總結(jié),勿認(rèn)真,有錯(cuò)誤盡情指出,大家一起交流。
需要用到的module malplotlib.pyplot 和networkx
正文:
一、malplotlib和networkx的安裝(作者使用的是python2.7 pycharm)
在Python的文件夾目錄下Scripts目錄中,如果有pip.exe 文件,那么可以用cmd 進(jìn)入這個(gè)目錄,然后輸入 `pip insall --pre matplotlib`直接下載。如果有easy_install 也可以輸入`easy_install。如果都不行就去官網(wǎng) https://pypi.python.org/pypi/matplotlib/1.5.3`找對(duì)應(yīng)版本下載。
至于networkx,pycharm的porject interpreter里添加就好。
二、創(chuàng)建圖
networkx有四種圖 Graph 、DiGraph、MultiGraph、MultiDiGraph,分別為無(wú)多重邊無(wú)向圖、無(wú)多重邊有向圖、有多重邊無(wú)向圖、有多重邊有向圖。
import network as nx G = nx.Graph()#創(chuàng)建空的網(wǎng)絡(luò)圖 G = nx.DiGraph() G = nx.MultiGraph() G = nx.MultiDiGraph()
然后是加點(diǎn)和邊了,有多種方法
G.add_node('a')#添加點(diǎn)a G.add_node(1,1)#用坐標(biāo)來(lái)添加點(diǎn) G.add_edge('x','y')#添加邊,起點(diǎn)為x,終點(diǎn)為y G.add_weight_edges_from([('x','y',1.0)])#第三個(gè)輸入量為權(quán)值 #也可以 list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)] G.add_weight_edges_from([(list)])
然后是圖形的顯示
#需要導(dǎo)入matplotlib import matplotlib.pyplot as plt nx.draw(G) plt.show()
為了讓圖形更精美我們?cè)斀鈔x.draw()
nx.draw(G,pos = nx.random_layout(G),node_color = 'b',edge_color = 'r',with_labels = True,font_size =18,node_size =20)
pos 指的是布局 主要有spring_layout , random_layout,circle_layout,shell_layout。node_color指節(jié)點(diǎn)顏色,有rbykw ,同理edge_color.
with_labels指節(jié)點(diǎn)是否顯示名字,size表示大小,font_color表示字的顏色。
看到這里,各位應(yīng)該就能畫出大量網(wǎng)站上的基本networkx簡(jiǎn)單教程了,大概是這個(gè)樣子
三、繪制精美的圖
如果你想要的圖是這樣的
或是這樣的
還是這樣的
可以繼續(xù)看下去
首先要掌握兩個(gè)方法
def draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k', style='solid', alpha=1.0, edge_cmap=None, edge_vmin=None, edge_vmax=None, ax=None, arrows=True, label=None, **kwds):
G:圖表 一個(gè)networkx圖 pos:dictionary 將節(jié)點(diǎn)作為鍵和位置作為值的字典。 位置應(yīng)該是長(zhǎng)度為2的序列。 edgelist:邊緣元組的集合 只繪制指定的邊(默認(rèn)= G.edges()) width:float或float數(shù)組 邊線寬度(默認(rèn)值= 1.0) edge_color:顏色字符串或浮點(diǎn)數(shù)組 邊緣顏色。可以是單顏色格式字符串(default ='r'), 或者具有與edgelist相同長(zhǎng)度的顏色序列。 如果指定了數(shù)值,它們將被映射到 顏色使用edge_cmap和edge_vmin,edge_vmax參數(shù)。 style:string 邊線樣式(默認(rèn)='solid')(實(shí)線|虛線|點(diǎn)線,dashdot) alpha:float 邊緣透明度(默認(rèn)值= 1.0) edge_ cmap:Matplotlib色彩映射 用于映射邊緣強(qiáng)度的色彩映射(默認(rèn)值=無(wú)) edge_vmin,edge_vmax:float 邊緣色圖縮放的最小值和最大值(默認(rèn)值=無(wú)) ax:Matplotlib Axes對(duì)象,可選 在指定的Matplotlib軸中繪制圖形。 arrows:bool,optional(default = True) 對(duì)于有向圖,如果為真,則繪制箭頭。 label:圖例的標(biāo)簽
def draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='r', node_shape='o', alpha=1.0, cmap=None, vmin=None, vmax=None, ax=None, linewidths=None, label=None, **kwds):
G:圖表
一個(gè)networkx圖
pos:dictionary 將節(jié)點(diǎn)作為鍵和位置作為值的字典。 位置應(yīng)該是長(zhǎng)度為2的序列。 ax:Matplotlib Axes對(duì)象,可選 在指定的Matplotlib軸中繪制圖形。 nodelist:list,可選 只繪制指定的節(jié)點(diǎn)(默認(rèn)G.nodes()) node_size:標(biāo)量或數(shù)組 節(jié)點(diǎn)大?。J(rèn)值= 300)。如果指定了數(shù)組,它必須是 與點(diǎn)頭長(zhǎng)度相同。 node_color:顏色字符串或浮點(diǎn)數(shù)組 節(jié)點(diǎn)顏色。可以是單顏色格式字符串(default ='r'), 或者具有與點(diǎn)頭相同長(zhǎng)度的顏色序列。 如果指定了數(shù)值,它們將被映射到 顏色使用cmap和vmin,vmax參數(shù)??吹? matplotlib.scatter更多詳細(xì)信息。 node_shape:string 節(jié)點(diǎn)的形狀。規(guī)格為matplotlib.scatter 標(biāo)記,'so ^> v <dph8'(默認(rèn)='o')之一。 alpha:float 節(jié)點(diǎn)透明度(默認(rèn)值= 1.0) cmap:Matplotlib色圖 色彩映射節(jié)點(diǎn)的強(qiáng)度(默認(rèn)=無(wú)) vmin,vmax:float 節(jié)點(diǎn)色彩映射縮放的最小值和最大值(默認(rèn)值=無(wú)) 線寬:[無(wú)|標(biāo)量|序列] 符號(hào)邊框的線寬(默認(rèn)值= 1.0) label:[無(wú)|串] 圖例的標(biāo)簽
然后基本上所有networkx的超酷精美圖的源碼你都能快速弄懂了。
http://networkx.github.io/ 網(wǎng)絡(luò)圖案例源碼
以上這篇使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python利用PyVista進(jìn)行mesh的色彩映射的實(shí)現(xiàn)
- Python Shiny庫(kù)創(chuàng)建交互式Web應(yīng)用及高級(jí)功能案例
- Python?Streamlit制作交互式可視化網(wǎng)頁(yè)應(yīng)用實(shí)例
- Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解
- Python基于Google?Bard實(shí)現(xiàn)交互式聊天機(jī)器人
- Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算詳解
- python獲取網(wǎng)絡(luò)圖片方法及整理過(guò)程詳解
- Python Pyvis庫(kù)創(chuàng)建交互式網(wǎng)絡(luò)圖實(shí)例探究
相關(guān)文章
解決python 虛擬環(huán)境刪除包無(wú)法加載的問(wèn)題
這篇文章主要介紹了解決python 虛擬環(huán)境刪除包無(wú)法加載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07python 如何將office文件轉(zhuǎn)換為PDF
這篇文章主要介紹了python 如何將office文件轉(zhuǎn)換為PDF,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-09-09python實(shí)現(xiàn)自動(dòng)解數(shù)獨(dú)小程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)解數(shù)獨(dú)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01python 殺死自身進(jìn)程的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python 殺死自身進(jìn)程的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07解決Pycharm無(wú)法import自己安裝的第三方module問(wèn)題
今天小編就為大家分享一篇解決Pycharm無(wú)法import自己安裝的第三方module問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python和Java的語(yǔ)法對(duì)比分析語(yǔ)法簡(jiǎn)潔上python的確完美勝出
Python是一種廣泛使用的解釋型、高級(jí)編程、通用型編程語(yǔ)言,由吉多·范羅蘇姆創(chuàng)造,第一版發(fā)布于1991年。這篇文章主要介紹了Python和Java的語(yǔ)法對(duì)比,語(yǔ)法簡(jiǎn)潔上python的確完美勝出 ,需要的朋友可以參考下2019-05-05