MCM520 ← 资料站首页 图表选择可视化指南:网络图:看结构与关系(深度版) 打开交互阅读器 →

图表选择可视化指南:网络图:看结构与关系(深度版)

展示节点与边构成的关系网络,揭示中心性、社群、路径等结构特征。

分类:🕸 结构图 适用:社交/路网/依赖关系、社群发现、关键节点识别

一、这个图适合谁(适用场景)

  • 社交/路网/依赖关系
  • 社群发现
  • 关键节点识别

二、图表结构要素

  1. 节点=实体
  2. 边=关系(可加权/有向)
  3. 布局算法
  4. 颜色=社群/属性

三、可视化的底层逻辑

网络图用"空间位置+连线"编码图结构,把抽象的"谁连谁、谁关键、怎么聚"变成可直观审视的图形。节点大小、边粗细、颜色这些都是预注意属性——读者无需刻意解读就能瞬间抓住重点(最大的节点、最粗的边、同色的簇)。但网络图的核心前提是"先正确建图":有向/无向、加权/二值一旦建错(如把关注关系当无向),"谁是关键节点"的结论会直接反转。布局算法(力导向)只是把结构"摊开",真正要传达的是拓扑特征(中心性、社群、路径),所以图后必须配文字解释——图不是装饰,而是分析结论的可视化载体。

四、视觉编码与感知推导

力导向布局:节点间斥力(库仑)+ 边引力(胡克),最小化能量

E=∑i<jkdij2−∑(i,j)∈E1dij E=\sum_{i<j}\frac{k}{d_{ij}^2}-\sum_{(i,j)\in E}\frac{1}{d_{ij}}

迭代至平衡,使连接紧密的节点自然聚拢——结构"自显"于布局中。

视觉编码映射(避免面积失真):节点度 kik_i 编码为半径时应取 ri∝kir_i\propto\sqrt{k_i},使面积 πr2∝ki\pi r^2\propto k_i 而非半径∝kik_i(后者会让面积∝ki2k_i^2,夸大高度数节点)。边权 wijw_{ij} 映射为线宽 wij′∝wijw'_{ij}\propto w_{ij}(线性,保证视觉宽度比=权重比)。

中心性(关键节点):度中心 CD(i)=kiC_D(i)=k_i、介数 CB(i)=∑σst(i)σstC_B(i)=\sum\frac{\sigma_{st}(i)}{\sigma_{st}}、PageRank rir_i 从不同角度定义"关键",应据问题选其一高亮标注,而非全图同色无重点。

毛球控制:边数 ∣E∣|E| 大时图成不可读"毛球"。可设阈值只画 wij>wthw_{ij}>w_{\text{th}} 的强边,或对社群做折叠(先 Louvain 聚成超级节点)。可读性约束建议 ∣E∣≲3∣V∣|E|\lesssim 3|V|。

五、怎么画(步骤)

  1. 选布局:力导向最常用,大图用多层级。
  2. 节点大小编码度/重要性,边粗细编码权重。
  3. 用颜色区分类别或社区。
  4. 标注关键节点(PageRank/介数最高)。
  5. 配文字解释结构含义,图不是装饰。

六、何时用 / 何时不用 / 常见丑图

  • 何时用:『谁和谁连、谁关键、怎么聚』。
  • 何时不用:纯数值对比 → 柱状/雷达。
  • 常见丑图:节点全同色无重点、边太多成毛球。

七、常见坑

  • 边过多成毛球
  • 不标关键节点
  • 只画不解释

八、画图自检清单

  • 布局清晰
  • 节点/边编码合理
  • 关键节点突出
  • 有结构解释

九、配套资源与搭配

  • 网络/图结构问题怎么选
  • Gephi 工具入门手册
  • 论文图表规范与排版

本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。

十、实战案例——Python 绘制 + 图效果

网络图展示节点与边的关系结构,适合分析社交网络、交通网络、物流配送。

案例场景:一个中心仓库向 5 个区域配送物资,边上的粗细表示配送频次。
从网络图可以看出:中心仓是核心节点(中心性最高),A 区与 E 区也有直接配送关系。

完整代码(Python + matplotlib)

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
nodes = ['中心仓', 'A区', 'B区', 'C区', 'D区', 'E区']
G.add_nodes_from(nodes)
edges = [('中心仓', 'A区', 3), ('中心仓', 'B区', 2), ('中心仓', 'C区', 4),
         ('中心仓', 'D区', 1), ('中心仓', 'E区', 2), ('A区', 'B区', 2),
         ('B区', 'C区', 1), ('C区', 'D区', 3), ('D区', 'E区', 2), ('A区', 'E区', 1)]
G.add_weighted_edges_from(edges)

pos = nx.circular_layout(G)
plt.figure(figsize=(7, 5))
weights = [G[u][v]['weight'] for u, v in G.edges()]
nx.draw_networkx_edges(G, pos, width=[w * 1.5 for w in weights], alpha=0.5,
                       edge_color='#0ea5e9')
nx.draw_networkx_nodes(G, pos, node_size=600, node_color=['#dc2626', '#2563eb',
    '#16a34a', '#f59e0b', '#7c3aed', '#0ea5e9'])
nx.draw_networkx_labels(G, pos, font_size=10, font_color='white', font_weight='bold')
plt.title('物流配送关系网络', fontsize=14, fontweight='bold')
plt.axis('off')
plt.tight_layout()
plt.show()

运行效果图

图X6  物流配送关系网络图


本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。