关于Networkx画图二

本文介绍如何使用Python的NetworkX库绘制带有不同颜色的完全子图,并展示如何设置节点布局。通过指定不同完全子图的颜色,使得图的可视化更加直观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import networkx as nx 
import matplotlib.pyplot as plt
输入:
 G=nx.Graph([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6),(4,7),(5,6),(5,7),(6,7),(6,11),(7,8),(8,9),(8,10),(9,10),(9,12)])

求:画出所有的节点和边,而且节点要有label
答:  
      nx.draw_networkx(G)
      plt.show()
得: 
     图片
求:每个完全子图的颜色都不一样
 答:
     
G=nx.Graph([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6),(4,7),(5,6),(5,7),(6,7),(6,11),(7,8),(8,9),(8,10),(9,10),(9,12)])
      #colors = [1,1,1,2,2,2,2,3,3,3,4,5]     #用数组来区分颜色,产生的颜色是随机的
    colors = ['r','r','r','b','b','b','b','y','y','y','w','g']   #给定每个节点的颜色
      #pos=nx.spring_layout(G)这句给定了节点的布局为spring型,
      #
- circular_layout:节点在一个圆环上均匀分布  
     #- random_layout:节点随机分布 
     #- shell_layout:节点在同心圆上分布 
     #- spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状) 
      nx.draw_networkx(G,pos=nx.spring_layout(G),node_color=colors)  
得:图片

注:另外还有一种画法是先画节点,再画边,有兴趣可以探究实验
### 如何使用 PythonNetworkX 库绘制图形 以下是通过 `NetworkX` 和 `Matplotlib` 绘制简单无向图的一个完整示例: ```python import networkx as nx import matplotlib.pyplot as plt # 创建一个空的无向图 G = nx.Graph() # 添加节点 G.add_node("Node A") G.add_node("Node B") G.add_node("Node C") # 添加边 G.add_edge("Node A", "Node B") G.add_edge("Node B", "Node C") G.add_edge("Node A", "Node C") # 设置布局方式(这里采用 spring 布局) pos = nx.spring_layout(G) # 使用 Matplotlib 进行绘图 nx.draw( G, pos, with_labels=True, # 是否显示节点标签 node_color="lightblue", # 节点颜色 node_size=1500, # 节点大小 font_size=10, # 字体大小 font_weight="bold", # 字体粗细 linewidths=0 # 边框宽度 ) plt.title("Simple Graph Visualization using NetworkX and Matplotlib") # 图形标题 plt.show() ``` 此代码展示了如何创建一个简单的无向图并对其进行可视化。它利用了 `spring_layout()` 方法作为默认布局算法[^1]。 对于更复杂的场景,比如带有权重的图或者不同的布局样式,可以参考以下扩展方法: #### 带有权重的图绘制 当需要表示加权图时,可以在添加边的同时指定权重,并调整边的宽度以反映这些权重[^4]。 ```python import networkx as nx import matplotlib.pyplot as plt # 创建一个新的图对象 G = nx.Graph() # 添加带权重的边 G.add_edge("A", "B", weight=2.0) G.add_edge("B", "C", weight=3.0) G.add_edge("A", "C", weight=1.0) # 获取边的权重列表用于后续设置线条宽度 weights = [d["weight"] * 5 for (_, _, d) in G.edges(data=True)] # 定义布局 pos = nx.spring_layout(G) # 绘制节点和边 nx.draw_networkx_nodes(G, pos, node_size=1500, node_color="orange") nx.draw_networkx_edges(G, pos, width=weights) nx.draw_networkx_labels(G, pos, font_size=10, font_family="sans-serif") # 显示权重标签 edge_labels = nx.get_edge_attributes(G, "weight") nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) plt.axis("off") # 关闭坐标轴 plt.show() ``` 以上代码片段实现了对加权图的可视化处理,其中每条边的宽度与其对应的权重成正比[^4]。 --- #### 不同类型的布局支持 除了弹簧布局 (`spring_layout`) 外,还可以尝试其他多种布局风格,例如圆形布局 (`circular_layout`) 或谱系布局 (`spectral_layout`) 等[^2]。 ```python import networkx as nx import matplotlib.pyplot as plt G = nx.complete_graph(7) # 构建完全图 K_7 # 圆形布局 pos_circular = nx.circular_layout(G) nx.draw(G, pos=pos_circular, with_labels=True, title="Circular Layout", node_color="skyblue") plt.show() # 谱系布局 pos_spectral = nx.spectral_layout(G) nx.draw(G, pos=pos_spectral, with_labels=True, title="Spectral Layout", node_color="pink") plt.show() ``` 这段脚本分别采用了两种不同的布局策略来呈现同一张完整的七阶图。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值