在之前的《绘制这种漂亮的桑基图只需“⼀步”?》和《3分⽂章和30分⽂章图表差在哪⾥?》两篇⽂章中已经介绍过桑基图(Sankey plots)了,但⽬前在⽂章中还是⽐较少见。
桑基图主要⽤来展⽰数据的“流动”变化,分⽀的宽度表⽰流量的⼤⼩,应⽤于能源流向、收⼊⽀出、⼈员流动,⽣物群落丰度变化等数据的可视化。但在之前提到的⼀篇⽂献中,作者巧妙地⽤桑基图来可视化差异ceR
(Cancer Cell International, 2019)
⽂章作者⽤到的R包是ggalluvial,安装⽅法⾮常简单,直接⽤install.packages(“ggalluvial”)函数在线安装即可。我这⾥就⽤这个R包为⼤家重现原⽂中的桑基图吧!数据准备
本⽂⽤到的范例数据来⾃原⽂的附录⽂件(Table S4),下载链接:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6458652/
#载⼊ggalluvial包;library(ggalluvial)#读⼊数据;
df <- read.table('network.txt',sep= '\',header = T)#检查数据的前6⾏;head(df)
“宽数据”作图
# 直接使⽤原始数据(宽数据)绘图;
# 绘制alluvium,width调整结点处条带⽔平宽度;knot.pos调整曲率;reverse调整着⾊顺序;p1<-ggplot(data = df,aes(axis1 = lncRNA,axis2 = miRNA,axis3 = mRNA, y = Freq))+ geom_alluvium(aes(fill = mRNA),width = 0.1, knot.pos = 0.1, reverse = F)p1
# 绘制stratum,添加⽂字标签并隐藏图例;
p2<-p1+geom_stratum(fill='white',color='skyblue',alpha= .7,width = 1/7)+ geom_text(stat = 'stratum', size =1.5,color='black',label.strata = T)+ guides(fill = FALSE)p2
#修改横轴的标签;p3<-p2+
scale_x_discrete(limits = c('lncRNA','miRNA','mRNA'),expand = c(0, 0))+ xlab('') + ylab('')
#⾃定义主题;
mytheme1<-theme_bw() +
theme(panel.grid =element_blank()) + theme(panel.border = element_blank()) +
theme(axis.line = element_blank(),axis.ticks =element_blank(),axis.text.y =element_blank())p4<-p3+mytheme1p4
“长数据”作图
使⽤宽数据画图⽐较直观,容易理解,但如果想给不同的stratum添加不同的颜⾊就不是很⽅便。其实,ggalluvial也⽀持长数据,毕竟是基于ggplot2的。
#检查数据是否符合要求;head(df)
is_alluvia_form(df,weight ='Freq')# 转成长数据格式;
df_lodes <- to_lodes_form(df,key ='x', value = 'stratum', id = 'alluvium',axes =1:3)#检查转换后的数据是否符合作图要求;head(df_lodes,12)
is_lodes_form(df_lodes,key = 'x',value = 'stratum',id = 'alluvium',weight ='Freq')
#⾃⼰⽣成渐变⾊;
mycol3=colorRampPalette(c('#00abef','#64b036','#ffe743','#64b036','#00abef'))(36)
对于绘图⽅法,除了数据映射⽅式,其他参数的⽤法与上⽂相似,这⾥就不做代码分解演⽰啦。
p5<-ggplot(df_lodes,aes(x = x, stratum =stratum, alluvium = alluvium, fill = stratum, label = stratum)) + scale_x_discrete(expand = c(0, 0)) + geom_flow(width = 0.2, knot.pos = 0.1) +
geom_stratum(alpha = .9,color='grey20',width = 1/7) + geom_text(stat = 'stratum', size =1.5,color='black') + scale_fill_manual(values = mycol3) + xlab('') + ylab('') + theme_bw() +
theme(panel.grid =element_blank()) + theme(panel.border = element_blank()) +
theme(axis.line = element_blank(),axis.ticks =element_blank(),axis.text.y =element_blank())+ guides(fill = FALSE) p5
绘图的结果如下:
如果⽤ggplot2的默认配⾊,其实也挺好看的,如下:
#使⽤⽂章中图表的颜⾊集;mycol <-rep(c('#223D6C','#D20A13','#FFD121','#088247','#11AA4D','#58CDD9','#7A142C','#5D90BA','#029149','#431A3D','#91612D','#6E568C','#E0367A','#D8D155','#64495D','#7CC767','#223D6C','#D20A13','#FFD121','#088247','#11AA4D','#58CDD9','#7A142C','#5D90BA','#0
如果想使⽤⽂章中的颜⾊,可将mycol变量赋值给scale_fill_manual(values = mycol);同时不想让stratum周围显⽰⽩⾊的“空⽩”,可将geom_flow()的width设为⼩于0.2的值, 得到效果如下:
其实我之前⼀直不喜欢这个图,因为颜⾊太多,可是看久了也就不觉得难看了。如果喜欢“直”的,可将knot.pos 的数值调为0,得到下图的效果:
今天的内容就到这⾥啦,如果你还是没学会,可以考虑报名我们的转录组培训班呀~
培训时间:2019年12⽉9⽇-12⽉13⽇
培训地点:基迪奥公司(⼴州⼤学城青蓝街)
转录组培训班是基迪奥“元⽼级”的精品培训班。随着测序技术的发展,基迪奥项⽬经验的积累,我们已将转录组培训班的培训内容更新到了4.0版本。专题理论实操:数据范例灵活,学员可以带上⾃⼰的转录组数据进⾏实操,解答数据挖掘问题;
多组学进阶提升:培训班在讲解转录组数据挖掘的基础上,拓展转录组与其他组学的多组学关联分析和数据挖掘;
数据的动态挖掘:基于基迪奥特有的在线平台Omicsmart的动态数据挖掘,学员可以完成个性化分析,定制专属结题报告。
参与培训的学员将获得价值2400元的6例样本数据的动态交互平台Omicsmart分析使⽤权,可随⼼所欲地对⾃⼰的原始数据进⾏个性化分析! 课程表
因篇幅问题不能全部显示,请点此查看更多更全内容