網(wǎng)站首頁 編程語言 正文
NetworkX是一個非常強大的網(wǎng)絡科學工具,它封裝了圖的數(shù)據(jù)結(jié)構(gòu)和許多經(jīng)典圖算法,也內(nèi)置了許多可視化函數(shù)可供調(diào)用。
1. 隨機圖生成
最經(jīng)典的隨機圖當屬我們在上一篇博客《Erdos-Renyi隨機圖的生成方式及其特性》中講到的Erd?s-Rény隨機圖了,我們這里選用其中的Gnp??np形式,調(diào)用以下API:
G = nx.erdos_renyi_graph(10, 0.3, seed=1)
這里表示生成10個頂點的圖,且圖的每條邊都以0.3的概率產(chǎn)生。
當然,此時生成的圖不具有權(quán)重,我們想在此基礎上均勻隨機初始化[0, 0.4]之間的權(quán)重,可以這樣寫:
G = nx.Graph() for u, v in nx.erdos_renyi_graph(10, 0.3, seed=1).edges(): G.add_edge(u, v, weight=random.uniform(0, 0.4))
2. 2D布局可視化
隨機圖生成好之后,我們就要對其進行可視化了。首先我們需要計算每個節(jié)點在圖中擺放的位置,經(jīng)典的Fruchterman-Reingold force-directed 算法可以完成這個操作,對應NetworkX中的spring_layout
函數(shù):
pos = nx.spring_layout(G, iterations=20) #我們設算法迭代次數(shù)為20次
然后就可以分別繪制圖的邊、節(jié)點和節(jié)點標簽了:
nx.draw_networkx_edges(G, pos, edge_color="orange") nx.draw_networkx_nodes(G, pos, node_color="black") nx.draw_networkx_labels(G, pos, font_color="white") plt.show()
繪圖結(jié)果如下:
當然,這樣圖的權(quán)值是無法體現(xiàn)于圖上的,如果我們需要圖的權(quán)值體現(xiàn)于圖上,可以使圖中邊的寬度按照權(quán)值大小來設置:
nx.draw_networkx_edges(G,pos, width=[float(d['weight']*10) for (u,v,d) in G.edges(data=True)], edge_color="orange") nx.draw_networkx_nodes(G,pos, node_color="black") nx.draw_networkx_labels(G, pos, font_color="white") plt.show()
此時的繪圖結(jié)果如下:
3. 3D布局可視化
如果你覺得2D布局過于扁平,還不夠直觀地體現(xiàn)節(jié)點之間的拓撲關系,那你可以采用如下的代碼對圖進行三維可視化:
# 3d spring layout pos = nx.spring_layout(G, dim=3, seed=779) # Extract node and edge positions from the layout node_xyz = np.array([pos[v] for v in sorted(G)]) edge_xyz = np.array([(pos[u], pos[v]) for u, v in G.edges()]) # Create the 3D figure fig = plt.figure() ax = fig.add_subplot(111, projection="3d") # Plot the nodes - alpha is scaled by "depth" automatically ax.scatter(*node_xyz.T, s=100, ec="w") # Plot the edges for vizedge in edge_xyz: ax.plot(*vizedge.T, color="tab:gray") def _format_axes(ax): """Visualization options for the 3D axes.""" # Turn gridlines off ax.grid(False) # Suppress tick labels for dim in (ax.xaxis, ax.yaxis, ax.zaxis): dim.set_ticks([]) # Set axes labels ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") _format_axes(ax) fig.tight_layout() plt.show()
此時的繪圖結(jié)果如下:
參考
- [1]?https://networkx.org/documentation/stable/reference/
原文鏈接:https://www.cnblogs.com/orion-orion/p/16256657.html
相關推薦
- 2022-08-31 Python的三種主要模塊介紹_python
- 2022-08-25 Python中的基本數(shù)據(jù)類型介紹_python
- 2022-06-16 Zabbix自定義腳本監(jiān)控nginx以及微信告警的全過程_zabbix
- 2023-01-04 Opencv實現(xiàn)計算兩條直線或線段角度方法詳解_python
- 2023-05-06 React組件渲染后對DOM的操作方式_React
- 2022-02-22 如何利用nginx做代理緩存淺析_nginx
- 2022-03-16 .Net?6中WebApplicationBuilder介紹和用法_自學過程
- 2023-11-17 Python中調(diào)用Linux命令并獲取其返回值
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支