堆叠柱状图梯形连接(桑基图)

今天我们来做一下桑基图,之前单细胞系列我们做过细胞比例堆叠柱状图的连线(跟着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)

image.png

使用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)

image.png

参数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)

image.png

除了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$start
df$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)

image.png

接下来就是连接了,gggenomes需要一个link文件,将上述df文件按照group分开,并计算length,重新拼接文件即可。


df_BM <- subset(df, group=='BM')
df_BM %>% mutate(length=end-start+1) -> df_BM
df_GM <- subset(df, group=="GM")
df_GM %>% mutate(length=end-start+1) -> df_GM
colnames(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)

image.png

主题修饰与ggplot一样,自行设置即可,不再演示!很显然,gggenomes的本意是做基因组示例图的,做这个有点勉强了,比较复杂,个人推荐第一种。当然了,多学一种也不是什么坏事!所有文件已上传QQ群!更多精彩请访问我的公众号《KS科研分享与服务》!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值