10.1 网络数据先想清楚:有多少节点、多少连线
网络(图)数据由两部分组成:节点(实体)+ 连线(关系)。画图前先看两个问题:
① 节点多不多?几十个以内 → 节点链接图;几百个 → 相邻矩阵/热力图;
② 连线密不密?线一多全糊住 → 用和弦图(圆形排布)或边绑定图(线成束)。
选图核心矛盾:节点图直观但怕拥挤,矩阵图不怕拥挤但不直观。节点少连线稀用节点链接图,反之用矩阵/和弦图。

10.2 相邻矩阵图:网络画成热力图
相邻矩阵把"谁和谁相连"写成矩阵:行=起点,列=终点,格子颜色=是否有连边/连边强度。
实现:ggplot2 的 geom_tile()(heatmap 样式)。
看什么:行列是否成块(有结构=节点按类别聚成社区);哪一行"特别亮"=该节点连线多(中心节点/枢纽)。
优势:节点几百个也不乱;劣势:读不出直观的"网络形态"。
论文用法:微生物共现网络的"共现强度矩阵"——物种×物种的颜色矩阵,能看群落内哪些物种关系紧密。
.png)
10.3 和弦图:圆形排布的流/关系
和弦图把节点排在圆周上,节点之间的连线(弧带)表示关系,带宽=权重。
实现:circlize 包的 chordDiagram()。
看什么:弧带粗=关系强;哪些节点"出带多"(主动流出)/"入带多"(被指向)。
适合:两两之间的流量/转移关系(贸易流、物种互作、转移矩阵);节点 10-40 个最佳。
论文用法:不同环境样本之间物种"共享/转移"关系、代谢物相关性网络。
.png)
library(circlize)
df_melt <- melt(df, id.vars = 'Region')
colnames(df_melt) <- c('from', 'to', 'value')
circos.clear()
circos.par(start.degree = 90, gap.degree = 4)
chordDiagram(df_melt) # from → to,带宽=value10.4 桑基图:流量怎么分叉汇合
桑基图展示"量从一组流向另一组"的路径:每根流带宽度=流量,流带的分叉/汇合=流向变化。
实现:ggalluvial 包(ggplot2 风格)或 networkD3 包(交互式)。
看什么:哪条路径流量最大;哪些阶段"分流"明显。
典型场景:样本分组→OTU 分类→物种分类的"流程";能量/物质在各环节的转移。
注意:流带层次多时标注会挤,用颜色区分大类、交互式悬停看数值最舒服。
.png)
10.5 网络节点链接图:最经典的网络画法
节点链接图 = 点 + 线:节点位置由布局算法决定(FR 力导向布局最常用,还有 sphere 球形、nicely 等),连线=关系。
实现:igraph 包算布局 + ggraph 包画图。
看什么:节点大小/颜色可映射度(连线数)或类别;中心枢纽节点一眼可见;社区(抱团的节点群)通过布局自然呈现。
力导向布局的原理:有连线的节点互相吸引,没连线的互相排斥,迭代到稳定——所以"关系近的靠在一起"。
论文用法:微生物共现网络(节点=OTU,边=显著相关)、基因互作网络。

library(igraph); library(ggraph) net <- graph_from_data_frame(edges, vertices = vertices) ggraph(net, layout = 'fr') + # FR 力导向布局 geom_node_point(aes(size = degree(net), color = group)) + geom_edge_link(alpha = 0.3)
10.6 蜂巢网络图与边绑定图:连线太多时的救兵
节点多、连线密时普通网络图是"毛线团",两个替代方案:
① 蜂巢图(Hive plot):按节点属性(如度数)把节点排到几条径向轴上,连线画在轴间——结构规律比毛线团清楚得多;
② 边绑定图(edge bundling):把走向相似的线绑成一束,像线缆一样——"谁到谁"仍可辨,但画面干净。
适合:网络研究的专业展示;普通论文里节点 < 100 时经典节点图就够了。
