R实用绘图--火山图 / ggplot2

火山图由散点图和阈值线构成,它通常用于展现统计检验的显著性(如:p value)和变化幅度(如:差异倍数),能够帮助我们快速直观地识别出那些变化幅度较大且具有统计学意义的数据点(如:差异基因)。常应用于生物学中的转录组、基因组等研究中。

图形解读

以封面中的彩色渐变火山图为例,点的颜色和点的大小均反映了-Log10(adjPvalue)的大小,该值越大点越大,颜色也越红。两条垂直线是Log2FC的阈值线,水平线是adjPvalue的阈值线。

绘图

加载包和数据

# 加载包、读取数据
library(ggplot2)
library(ggrepel)
library(RColorBrewer)
library(tidyverse)
load('./degdata.Rdata')

colnames(degdata)

绘图数据准备

# 设定差异基因阈值
degdata$status <- 'stable'
degdata$status[degdata$logFC>1 & degdata$adj.P.Val<0.05] <- 'up'
degdata$status[degdata$logFC< -1 & degdata$adj.P.Val<0.05] <- 'down'

# 挑选出差异基因子集,用于后续添加label
labeldata <- subset(degdata, abs(logFC)>1 & adj.P.Val<0.05)
id <- order(-log10(labeldata$adj.P.Val),decreasing = T)
labeldata <- labeldata[id,]

基础版

# (1)基础版-------------------------------------------
ggplot(degdata,aes(logFC,-log10(adj.P.Val)))+
  # 绘制散点
  geom_point(aes(color=status),
             size=1.5)+
  # 绘制垂直线
  geom_vline(xintercept = c(log2(1/2),log2(2)), linetype = "dashed")+
  # 绘制水平线
  geom_hline(yintercept = -log10(0.05), linetype = "dashed")+
  theme_bw()+
  # 设置点的颜色
  scale_color_manual(values = c('red','grey','blue'))+
  # 设置标签注释
  geom_text_repel(data = labeldata[1:10,], 
                  aes(label = label,color=status),
                  size=2.5)+
  # 横轴标题
  xlab('Log2FC')+
  # 纵轴标题
  ylab('-Log10(adjPvalue)')
ggsave('plot1.pdf',width = 7,height = 5.5)

plot1

进阶版


# (2)进阶版-------------------------------------------
ggplot(data = degdata,
       mapping = aes(
         x=logFC,
         y=-log10(adj.P.Val)))+
  # 绘制散点
  geom_point(aes(color=status,
                 size= -log10(adj.P.Val)),
             alpha=1)+
  # 绘制垂直线
  geom_vline(xintercept = c(log2(1/2),log2(2)), linetype = "dashed")+
  # 绘制水平线
  geom_hline(yintercept = -log10(0.05), linetype = "dashed")+
  theme_bw()+
  # 设置点的颜色
  scale_color_manual(values = c('#ffcc00','grey','#0066ff'))+
  # 设置点的大小范围
  scale_size_continuous(range = c(0.3,3)) + 
  # 设置标签注释
  geom_text_repel(data = labeldata[1:10,],
                  mapping = aes(label = label,color=status),
                  size=2)+
  # 横轴标题
  xlab('Log2FC')+
  # 纵轴标题
  ylab('-Log10(adjPvalue)')
ggsave('plot2.pdf',width = 7,height = 5.5)

plot2

彩色渐变版


# (3)彩色渐变版-------------------------------------------
ggplot(data = degdata,
       mapping = aes(
         x=logFC,
         y=-log10(adj.P.Val)))+
  # 绘制散点
  geom_point(aes(color=-log10(adj.P.Val),
                 size= -log10(adj.P.Val)),
             alpha=1)+
  # 绘制垂直线
  geom_vline(xintercept = c(log2(1/2),log2(2)), 
             linetype = "dashed",
             color='#363636')+
  # 绘制水平线
  geom_hline(yintercept = -log10(0.05),
             linetype = "dashed",
             color='#363636')+
  theme_bw()+
  # 设置点的颜色
  scale_color_gradientn(colours = brewer.pal(11,'RdYlBu') %>% rev())+
  # 设置点的大小范围
  scale_size_continuous(range = c(0.3,3)) + 
  # 设置标签注释
  geom_text_repel(data = labeldata[1:10,],
                  mapping = aes(label = label,
                                color=-log10(adj.P.Val)),
                  size=2.5)+
  # 横轴标题
  xlab('Log2FC')+
  # 纵轴标题
  ylab('-Log10(adjPvalue)')+
  # 去除一个图例,设置另一个图例的标题
  guides(size=FALSE,
         color=guide_colorbar(title = '-Log10(adjPvalue)')) # guide_colorbar是设置连续型变量图例的
ggsave('plot3.pdf',width = 7,height = 5.5)

plot3

提示

Error in grid.Call(C_convert, x, as.integer(whatfrom), as.integer(whatto), : Viewport has zero dimension(s) 如果运行绘图代码后出现这个报错,一般是由于绘图区域太小了,调大绘图区域重新运行代码就可以啦。

初学R绘图的小伙伴可以自己尝试绘制一下火山图,火山图的代码其实并不难,但是它需要用到的ggplot2的基础语法比较多,可以拿火山图练练手学习一下ggplot2的基础语法。

示例获取

示例代码及数据获取:

方式①:转发此文至朋友圈,所有人可见,保留1h,集6个赞,文案附“推荐关注”。1h后截图发送后台,并留言“20231221火山图”。

方式②:关注公众号,文末点击“喜欢作者”,赞赏本文,金额随意。截图发送后台,并留言“20231221火山图”。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮肤小白生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值