如何用NetworkX为网格图部分节点着色及相关优化问题
使用NetworkX为网格图节点着色及调整尺寸
首先,你的现有代码可以简化——nx.grid_graph生成的节点本身就是(i,j)元组,直接用它作为位置参数即可,无需手动创建p列表和赋值节点属性:
import networkx as nx import matplotlib.pyplot as plt # 需要导入matplotlib显示图形 s = 10 G = nx.grid_graph(dim=[s, s]) # 直接用节点本身作为位置映射 pos = {node: node for node in G.nodes()}
为指定节点着色
要给特定节点设置颜色,需创建颜色映射列表,每个元素对应一个节点的颜色:
- 先给所有节点设置默认颜色(比如
'lightblue') - 定位目标节点(如左下角的
(0,0)、右上角的(9,9)),修改对应位置的颜色
示例代码:
# 初始化颜色映射,默认所有节点为浅蓝色 node_colors = ['lightblue'] * len(G.nodes()) nodes_list = list(G.nodes()) # 找到左下角节点(0,0)的索引,设为红色 idx_bottom_left = nodes_list.index((0, 0)) node_colors[idx_bottom_left] = 'red' # 找到右上角节点(9,9)的索引,设为绿色 idx_top_right = nodes_list.index((9, 9)) node_colors[idx_top_right] = 'green' # 绘制图形,传入颜色和尺寸参数 nx.draw(G, pos, node_color=node_colors, node_size=50) # node_size控制节点大小,数值越小节点越小 plt.show()
调整节点尺寸
在nx.draw()函数中,通过node_size参数即可调整节点大小,比如node_size=30会比默认尺寸小很多。
更适合绘制彩色点阵的工具
如果你的最终目标只是绘制带颜色的点阵(不需要图的边或网络分析功能),Matplotlib是更简单直接的选择,它专门用于数据可视化,学习成本更低:
示例代码(绘制10×10点阵,指定节点颜色):
import matplotlib.pyplot as plt s = 10 # 生成所有点阵坐标 x = [i for i in range(s) for j in range(s)] y = [j for i in range(s) for j in range(s)] # 初始化颜色列表,默认蓝色 colors = ['blue'] * (s*s) # 设置左下角(0,0)为红色,右上角(9,9)为绿色 colors[0] = 'red' # (0,0)是第0个元素 colors[-1] = 'green' # (9,9)是最后一个元素 # 绘制点阵 plt.scatter(x, y, color=colors, s=50) # s控制点的大小 plt.grid(True) # 显示网格线 plt.show()
这个方法无需处理图结构,直接操作坐标和颜色,更贴合你的需求。
内容的提问来源于stack exchange,提问作者Jeffrey Jao
相关产品推荐
相关产品推荐

