本文介绍用以下包绘制桑基图。
- ggalluvial包
- sankeyD3包
1. ggalluvial包绘制桑基图
1.1 长数据绘制
数据准备:
1 | > head(my_data) |
绘图所需要的数据,如上所示,这个方法绘图,数据需要是tidy的,即用长数据作图。
绘图代码:
1 | p1 <- ggplot(my_data, |
结果如图:
绘图语法与ggplot2一致,函数包含以下变量:
- 首先确定图的axis,x轴表示不同时期,沿着x轴表示不同位置的水平分组;
- 每个轴上的分组被描绘成不透明的块,称为地层(strata)。Stage1轴包含m6A+和m6A-;
- 被称为**冲积(alluvia)**的水平(x-)样条横跨地块的宽度。在这个图中,每个冲积层对应于每个轴变量的固定值,由其在轴上的垂直位置表示,以及由其填充颜色表示的Survived变量的固定值。
- 在相邻轴线之间的冲积层片段是水流(flow)。
冲积层在矿脉处(lodes)与地层相交。上述图中没有显示矿脉,但可以推断为填充的矩形,这些矩形在图的每一端延伸流过地层的流动,或连接中心地层两侧的流动。
具体到本例,即:
- axis:x轴为不同stage、x轴不同取值的组合代表不同分组,y轴由每个轴变量的值表示,即每个分组的flow宽度,即Freq;
- stratum:为x轴每个分块的取值;
- alluvium:为每个分组的id,用以区分不同的组;
但是这样画出的图,不详细区分每个组分,在stage2出来之后,就不会记得stage1的状态。如果要区分每一个group的话,需要在geom_flow()中加stat = "alluvium"
参数,配合lode.guidance = "frontback"
参数一起,效果更好,color指定边界的颜色:
1 | p2 <- ggplot(my_data, |
1.2 宽数据绘制
1 | head(my_df) |
宽数据绘制:
1 | ggplot(my_df, |
如图所示:
2. sankeyD3包绘制
1 | install.packages("devtools") |