跟着Cell学作图:R语言ggplot2作图展示差异表达的基因

2022-02-17 17:17:17 浏览数 (1)

一组对照加处理这种实验的差异表达分析结果通常是用火山图来展示,如果是很多组实验的话如何展示,这种情况我之前还没有遇到过。公众号后台有读者留言问到了如下的图

这个图来自于论文A Spatiotemporal Organ-Wide Gene Expression and Cell Atlas of the Developing Human Heart

本地pdf PIIS0092867419312826.pdf

他这个应该是单细胞的数据,具体展示的是什么意思我还没看明白。我的理解是0-9,10组数据分别做了差异表达分析,把差异表达分析的结果全放在一张图上展示可以采用这样的形式。

下面试着模仿一下这个图。

我没有找到这么多差异表达分析的结果,我这里只用到了4组数据

首先是将差异表达分析的结果整理成如下格式

  • 第一列是基因名
  • 第二列是logfc
  • 第三列是adjusted p value
  • 第四列是给adjusted p value 一个分组
  • 第五列是表示数据来自于哪组实验

首先是读取数据

代码语言:javascript复制
dat00<-read.csv("cellexamdat.csv",
                row.names = 1)
head(dat00)

接下来是构造数据集用来添加中间部分的色块

代码语言:javascript复制
dat<-data.frame(x=c("A","B","C","D"),
                y=0,
                label=c(0,1,2,3))

构造数据集用来添加背景的灰色柱子

代码语言:javascript复制
datbar<-data.frame(x=c("A","B","C","D"),
                   y=c(20,10,20,10))

接下来是作图代码

代码语言:javascript复制
library(ggplot2)
library(ggnewscale)
library(tidyverse)


ggplot() 
  geom_col(data=datbar,aes(x=x,y=y),fill="grey",alpha=0.5) 
  geom_col(data=datbar,aes(x=x,y=-y),fill="grey",alpha=0.5) 
  geom_jitter(data=dat00 %>% filter(newcol1 == 'adjusted P-val > 0.01'),
              aes(x=newcol2,y=log2FoldChange,
                  color=newcol1)) 
  geom_jitter(data=dat00 %>% filter(newcol1 == 'adjusted P-val < 0.01'),
              aes(x=newcol2,y=log2FoldChange,
                  color=newcol1)) 
  scale_color_manual(name=NULL,
                     values = c("red","darkgrey")) 
  ggnewscale::new_scale_fill() 
  theme_minimal() 
  theme(axis.line.y = element_line(),
        axis.ticks.y = element_line(),
        panel.grid = element_blank(),
        legend.position = "top",
        legend.justification = c(1,0),
        legend.direction = "vertical",
        axis.text.x = element_blank()) 
  labs(x="Cluster",y="average logFC") 
  geom_tile(data=dat,
            aes(x=x,y=y,fill=x),
            height=3,color="black",
            alpha=0.9,
            show.legend = F) 
  scale_fill_manual(values = c("#44a9a9","#4177aa","#12783c","#a94698")) 
  geom_text(data=dat,aes(x=x,y=y,label=label))

结果如下

作图的代码具体意思就不详细介绍了,争取抽时间录制视频介绍,视频可能会更直观一点。

还有一个问题是如何添加表示基因名的文本标签,这个暂时没有想明白,想明白了再来介绍。

0 人点赞