打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
堆叠柱状图梯形连接(桑基图)
userphoto

2022.09.22 重庆

关注

1、《KS科研分享与服务》公众号有QQ交流群,但是进入门槛是20元,请考虑清楚。群里有推文的注释代码和示例数据,付费内容半价,还可以与大家交流。

2、单细胞转录组全流程代码需收费,收费代码包含公众号付费内容,也有很多新增加的内容。需进群或者需单细胞代码的小伙伴请添加作者微信了解,请备注目的,除此之外请勿添加,谢谢!

3、付费文章集合有打包价哦!

详情请联系作者:

今天我们来做一下桑基图,之前单细胞系列我们做过细胞比例堆叠柱状图的连线(跟着Cell学单细胞转录组分析(十四):细胞比例柱状图---连线堆叠柱状图),我们还是以此为例,之前是用线连接,这里使用面积连接,也就是桑基图。

构建作图数据。












setwd("D:/KS项目/公众号文章/桑基图")library(Seurat)library(ggplot2)library(dplyr)library(ggalluvial)#构建数据Ratio <- scedata@meta.data %>%  group_by(group, celltype) %>%#分组  summarise(n=n()) %>%  mutate(relative_freq = n/sum(n))celltype_ratio$celltype <- factor(celltype_ratio$celltype)

简单的做一个堆叠柱状图。













#堆叠柱状图mycolor = c('#efb306',            '#7db954',            '#852f88',            '#4e54ac',            '#0f8096')ggplot(Ratio) +   geom_bar(aes(x =group, y= relative_freq, fill = celltype),stat = "identity",width = 0.7,size = 0.5,colour = '#222222')+   theme_classic() +  labs(x='Sample',y = 'Ratio')+  coord_flip()+  scale_fill_manual(values = mycolor)

使用ggalluvial包的geom_flow函数。










#冲击桑基图ggplot(Ratio, aes(x =group, y= relative_freq, fill = celltype,                  stratum=celltype, alluvium=celltype)) +   geom_col(width = 0.5, color='black')+  geom_flow(width=0.5,alpha=0.4, knot.pos=0)+  theme_classic() +  labs(x='Sample',y = 'Ratio')+  coord_flip()+  scale_fill_manual(values = mycolor)

参数knot.pos设置为0.5,连接为曲线面积,就像常见的桑基图了,其他的桑基图也可以类似于这样的方法完成!









ggplot(Ratio, aes(x =group, y= relative_freq, fill = celltype,                  stratum=celltype, alluvium=celltype)) +  geom_col(width = 0.5, color='black')+  geom_flow(width=0.5,alpha=0.4, knot.pos=0.5)+  theme_classic() +  labs(x='Sample',y = 'Ratio')+  coord_flip()+  scale_fill_manual(values = mycolor)


除了ggplot之外,也有一款R包gggenomes可以很好的完成桑基图,虽然它的设计初衷是为了展示基因组效果!官方的安装教程如下:



library(devtools)devtools::install_github("thackl/thacklr")devtools::install_github("thackl/gggenomes")
一般情况安装会失败,所以我选择了本地安装,下载的包文件已同此贴上传群文件。文件路径请自行选择,安装依赖包,就可以安装成功了。





install.packages("C:/Users/tq199/Desktop/thackl-thacklr-2ff883e.tar.gz", repos = NULL, type = "source")install.packages("gggenes")install.packages("snakecase")install.packages("C:/Users/tq199/Desktop/thackl-gggenomes-fe5aeb8.tar.gz", repos = NULL, type = "source")library(gggenomes)
然后准备数据,这里柱子的画法就不同于ggplot了,类似于将每一段分开,整理出起点和终点的位置,拼接起来,就完成了。














df <- read.csv("Ratio1.csv", header = T)df$start <- 100*df$startdf$end <- 100*df$end
#柱状图mycolor = c('#efb306','#7db954','#852f88','#4e54ac','#0f8096')gggenomes(genes = df)+geom_gene(shape=0,aes(fill=celltype), size = 10)+geom_bin_label(size = 4, expand_left=0,nudge_left =0.01)+scale_fill_manual(values = mycolor)
接下来就是连接了,gggenomes需要一个link文件,将上述df文件按照group分开,并计算length,重新拼接文件即可。












df_BM <- subset(df, group=='BM')df_BM %>% mutate(length=end-start+1) -> df_BMdf_GM <- subset(df, group=="GM")df_GM %>% mutate(length=end-start+1) -> df_GMcolnames(df_GM) <- c("seq_id2","group2","celltype2","n2","relative_freq2","start2","end2","length2")data_link <- cbind(df_BM, df_GM)
gggenomes(genes = df,links = data_link)+geom_gene(shape=0,aes(fill=celltype), size = 10)+geom_bin_label(size = 4, expand_left=0,nudge_left =0.01)+scale_fill_manual(values = mycolor)+geom_link(aes(fill=celltype),offset = 0.25)
主题修饰与ggplot一样,自行设置即可,不再演示!很显然,gggenomes的本意是做基因组示例图的,做这个有点勉强了,比较复杂,个人推荐第一种。当然了,多学一种也不是什么坏事!所有文件已上传QQ群!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
堆叠柱状图各成分连线画法:突出展示组间物种丰度变化
堆叠柱状图也要做统计-标记显著性
ggplot2
scRNA分析| Seurat堆叠小提琴图不满足? 那就ggplot2 堆叠 各种元素
R的ggplot2包画柱状图?
谱聚类
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服