关于图的可视化
图的可视化是图论和网络分析中的重要环节。一个好的可视化方案可以帮助我们: 理解图的结构、发现模式、传达洞察。NetworkX提供了丰富的可视化功能, 从节点布局到节点和边的装饰,再到分别绘制节点和边的高级技巧。
本章将介绍draw_networkx()的基本用法,以及draw_networkx_nodes()、draw_networkx_edges()、draw_networkx_labels()等更精细的绘制函数。
节点位置
布局算法决定图的整体结构
节点位置布局是图可视化的基础。NetworkX提供了多种布局算法:弹簧布局(spring_layout)模拟节点间的弹簧力和斥力关系;圆周布局(circular_layout)将节点均匀分布在圆周上;随机布局(random_layout)随机放置节点; 此外还支持自定义布局,手动指定特定节点的位置。
💻 常用布局算法
🎯 布局选择建议
节点装饰
大小、颜色、形状、透明度
节点装饰用于编码节点的属性。节点大小可以表示重要性、权重或度数;节点颜色可以表示分类、聚类或连续属性值;节点形状可以区分不同类型的节点;透明度可以突出重点或显示置信度。 NetworkX支持颜色映射(colormap),可以将连续值映射到颜色渐变。
🎨 图着色问题
图着色问题起源于地图着色:用不同的颜色为地图不同区域着色, 要求相邻区域颜色不同,并且整张地图所用颜色种类最少。
十二面体图(dodecahedral graph)是柏拉图图的一种,有20个节点、30条边, 使用贪心着色算法可以用4种颜色完成着色。
边装饰
颜色、线宽、线型、选择性绘制
边装饰用于编码边的属性。线宽可以表示边的权重或强度;颜色可以区分不同类型或权重的边;线型(实线、虚线)可以区分强弱连接;选择性绘制可以过滤噪声边,只显示重要的连接。 通过列表生成式和条件过滤,可以灵活控制要显示的边。
鸢尾花数据欧氏距离图(图8、图9)
基于鸢尾花数据前两个特征的欧氏距离矩阵可以构造图。 图8展示了所有边和过滤后的边的对比,图9展示了距离矩阵热图和距离分布直方图。 这个例子体现了"图就是矩阵,矩阵就是图"的核心思想。
📊 边装饰参数
🔍 选择性绘制技巧
使用列表生成式过滤边:
指定要绘制的边:
分别绘制节点和边
更精细的可视化控制
对于复杂的图可视化需求,draw_networkx()可能不够灵活。 NetworkX提供了draw_networkx_nodes()、draw_networkx_edges()、draw_networkx_labels()、draw_networkx_edge_labels()等函数, 允许分别绘制节点和边,实现更精细的控制。 例如:不同权重的边使用不同线型和颜色,按度数渲染节点大小和颜色。
🌈 图12:有向图+颜色条
有向图增加颜色条(colorbar),展示节点度数与颜色的映射关系。
在组件中选择"🌈 颜色条"模式查看效果
🏷️ 图13:节点标签
每个节点都用draw_networkx_labels()增加了自定义标签。
nx.draw_networkx_labels(G, pos, labels)
📊 图14:按度数渲染
根据节点度数大小用颜色映射和大小渲染节点。
这是一个包含400个节点的随机几何图,展示了度数分布的可视化效果。
🎯 分别绘制的优势
🌸 鸢尾花数据示例
基于鸢尾花数据前两个特征的欧氏距离矩阵可以构造图。 这个例子展示了图就是矩阵,矩阵就是图的核心思想。
通过过滤距离大于0.5的边,可以减少噪声,突出局部结构。 使用不同颜色表示鸢尾花的三个类别,形成清晰的聚类可视化。
本章小结
本章系统介绍了用NetworkX可视化图的各种技巧,从节点位置布局到节点和边的装饰, 再到分别绘制节点和边的高级方法。掌握这些技巧可以创建清晰、美观、信息丰富的图可视化。