基本图形绘制R语言单细胞测序

ggplot2 金字塔图形(双向柱状图)

2021-10-29  本文已影响0人  Zee_李海海

这篇文章主要是分享一下金字塔图形的绘制方法,其来源是文章中的图E,如下:

文章图片.jpg

看了一下,可以通过ggplot2来实现,数据来自于自己试验的数据(该数据也是两个样本整合的数据,计算了每个样本的各个cluster的细胞占比)
数据如下:

data<-read.csv("example.csv")
head(example.csv)
Cluster,Y_SYF,O_SYF
0,0.272023932329276,0.175896900034831
1,0.16412213740458,0.156391501219087
2,0.132865690117599,0.0945083014048531
3,0.179182999793687,0.0022059677232091
4,0.00330101093459872,0.197492163009404
5,0,0.142691280622315

使用该数据绘制金字塔图形
代码如下:

library(ggplot2)
library(tidyverse)

setwd("C:/Users/shuju/Desktop/")
data<-read.csv("example.csv")
table<-gather(data,key=Sample,value=Per,-Cluster)
table$Cell<-round(table$Per * 100,2)
table$Cluster<-factor(table$Cluster)
table[which(table$Sample == 'O_SYF'), c('Per', 'Cell')] <- table[which(table$Sample == 'O_SYF'), c('Per', 'Cell')] * -1   #将另一个样本的数据转化为负数,这是必须的一步
p<-ggplot(table,aes(Cluster,Cell,fill=Sample))+geom_col()+coord_flip()+scale_y_continuous(breaks = seq(-40, 40, 10), labels = as.character(abs(seq(-40, 40, 10))), limits = c(-40, 40))+  #设置y轴合适范围,并将负数转化为正数
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), legend.title = element_blank(),axis.text = element_text(color="black",size=12),axis.title = element_text(color = "black",size=15)) +geom_hline(yintercept = 0, size = 0.4) + #添加中间的线,或者不添加也行
annotate('text',label = 'Y_SYF', 1, 40)+annotate('text',label = 'O_SYF', 1, -40)  #添加注释信息
ggsave(p,file="plot.pdf")
金字塔图

由于cluster0的细胞数目最多,我们可以将该图进行一个有多到少的调整。

table$Cluster<-factor(table$Cluster,levels=rev(unique(table$Cluster)))#将x轴倒序排列
p<-ggplot(table,aes(Cluster,Cell,fill=Sample))+geom_col()+coord_flip()+scale_y_continuous(breaks = seq(-40, 40, 10), labels = as.character(abs(seq(-40, 40, 10))), limits = c(-40, 40))+theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), legend.title = element_blank(),axis.text = element_text(color="black",size=12),axis.title = element_text(color = "black",size=15)) +geom_hline(yintercept = 0, size = 0.4) +annotate('text',label = 'Y_SYF', 1, 40)+annotate('text',label = 'O_SYF', 1, -40)

pdf("plot.pdf")
print(p)
dev.off()
金字塔图形

剩下可以精修一下就可以了(添加差异显著性)。

上一篇下一篇

猜你喜欢

热点阅读