9.1 层次结构图怎么选:同一种数据的四种画法
层次(树形)数据可以画成四种样子,各有侧重:
① 节点链接图:点+连线,层级关系最清楚(上下级一目了然),但节点多时会乱;
② 树形图(冰柱图):像倒置的树/冰柱,适合看层级深度;
③ 旭日图:同心圆环,每圈一层,面积=数值,层级+占比一起看;
④ 矩形树状图(treemap):用矩形面积表示数值,空间利用率最高;
⑤ 圆堆积图:圆套圆,适合展示嵌套关系。
选图原则:层级多、要标注准确 → 节点链接图/树形图;层级+数值占比 → 旭日图/矩形树状图;节点极多 → 矩形树状图(最省空间)。
节点链接图的正交布局法.png)
_旭日图.png)
_矩形树状图.png)
9.2 节点链接图:层级关系最直白
节点链接图 = 节点(个体)+ 连线(隶属关系)。布局有两种:
① 正交布局:像组织结构图,上下排布,父子关系靠连线和缩进表达;
② 径向布局:根节点在圆心,各级向外辐射成同心圆——节点多时比正交布局紧凑。
实现:ggraph 包(layout = 'dendrogram'/'partition' 等)或 igraph。
看什么:树有多深(层级数)、哪些分支特别长(分类层级多)。
论文用法:物种分类树(门纲目科属种)的可视化。
节点链接图的径向布局法.png)
9.3 树形图:聚类结果的默认展示
树形图(dendrogram)是层次聚类的配套图:hclust() 聚类后,树的分叉高度=样本/变量的相似度,越高越不相似。
实现:ggplot2 的 ggdendro 包或 dendextend 包;ggtree 包是微生物系统发育树的专业工具。
看什么:哪些样本/物种先合并(关系近),树的高低分叉把数据分成几大簇。
论文用法:样品聚类(Bray-Curtis 距离 + UPGMA 法)、物种系统发育树——16S 分析里和 PCA/热力图配套出现。
9.4 旭日图:层级 + 占比一张图
旭日图(sunburst)从圆心开始一圈一圈向外:圆心=顶层分类,每向外一圈=下一级,每段弧的面积=数值占比。
实现:ggplot2 手绘(geom_col + coord_polar)或 sunburstR/plotly 包。
看什么:外层哪段最大=细分后占主体的类别;同一角度方向的多层弧=同一大类的细分链。
注意:最内圈占比小(比如 2%)的类别,外圈再细分就看不清了——细分前先看内圈占比。
论文用法:物种分类占比(门→纲→目 各层级)的可视化。
旭日图.png)
9.5 圆堆积图:圆套圆的嵌套
圆堆积图(circle packing)把层级画成"圆套圆":外层大圆=父类,内层小圆=子类,圆面积=数值。
实现:ggraph 的 layout='circlepack'(代码见下)。
看什么:哪组"包得紧"(子类多且密);最大圆=主导类别。
适合:节点几十个以内、想强调嵌套关系;比矩形树状图好看但空间利用率低,大圆套小圆容易挤。
library(ggraph); library(igraph) mygraph <- graph_from_data_frame(edges, vertices = vertices) ggraph(mygraph, layout = 'circlepack', weight = "size") + geom_node_circle(aes(fill = depth)) + geom_node_text(aes(label = shortName, filter = leaf)) + theme_void()
9.6 矩形树状图:面积=数值,最省空间
矩形树状图(treemap)把整体切成一堆矩形:每块面积=数值大小,父类用粗边框,子类在内部细分。
实现:treemap 包(快、专业)或 ggplot2 的 treemapify。
看什么:谁占面积最大=谁数值最大;同色系区域=同一父类。
优点:几千个节点也能塞进一张图;缺点:矩形形状不能精确读出数值,且小矩形标注放不下。
论文用法:物种丰度组成(门水平谁占主导)、KEGG 通路占比。
library(treemap)
proglangs <- read.csv("Treemap_Data.csv")
treemap(proglangs,
index = c("parent", "id"), # 层级:父类 + 子类
vSize = "value", # 面积 = 数值
vColor = "parent", type = "index",
palette = "Set1")