# A tibble: 9 x 4
Class1 Class2 CLass3 Freq
<chr> <chr> <chr> <int>
1 S1 S2 S2 1
2 S1 S2 S1 3
3 S1 S3 S2 2
4 S1 S1 S1 3
5 S1 S1 S3 1
6 S2 S1 S1 2
7 S2 S1 S2 2
8 S2 S3 S3 1
9 S2 S2 S2 1
R语言如何绘制桑基图
前言
本篇是R包ggalluvial绘制桑基图的教程。
什么是桑基图
桑基图(Sankey Diagram),即桑基能量分流图,也叫桑基能量平衡图。图中延伸的分支的宽度对应数据流量的大小。
桑基图主要由边、流量和节点组成,其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。边的宽度与流量成比例地显示,边越宽,数值越大。
桑基图原则上要保持能量的守恒。无论数据怎样流动,数据的总量从开始到结束都不能有变化,不能在中间过程创造出数据,损耗的数据应该流向表示损耗的结点。
绘图前的数据准备
前三列是桑基图结点的流向,从CLass1流向Class2,再流向Class3;Freq是这个流的大小。
demo数据可以从这下载:https://www.r2omics.cn/res/demodata/sankey.txt
R语言如何绘制桑基图
# 代码来源:https://www.r2omics.cn/
# 加载包
library(ggalluvial)
# 读数据
= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/sankeyNetwork/data.txt")
df
# 转换为长数据,更通用
= to_lodes_form(data.frame(df),
dfLong key = "x",
axes = 1:3) # 将第1到3列进行宽边长转换,记得根据实际数据做调整
# 绘图
ggplot(data = dfLong,
aes(x = x,
stratum = stratum,
alluvium = alluvium,
y = Freq,
label = stratum,
fill = stratum)) +
geom_alluvium(fill = "darkgray") + # 流向:完全的能量守恒
# geom_flow(fill = "darkgray")+ # 流向:不完全的能量守恒
geom_stratum() + # 结点柱子
geom_text(stat = "stratum") + # 柱子上的文字标签
theme_void() # ggplot2主题方案:空白