R语言做图重点关注火山图

ggplot2优雅的绘制火山图

2021-09-07  本文已影响0人  R语言数据分析指南

关于火山图,绘制的教程有很多也有不少专门绘制火山图的包,说到底火山图无非就是散点图的变形,本节来介绍如何通过ggpotl2绘制火山图

安装&加载R包

package.list=c("tidyverse","ggrepel")

for (package in package.list) {
  if (!require(package,character.only=T, quietly=T)) {
    install.packages(package)
    library(package, character.only=T)
  }
}

ctrl+shift+M 即可打出 管道符号 %>%

数据清洗

根据padj & log2FoldChange判断差异是否显著

df <- read_tsv("genes.counts..DESeq2.xls") %>%
  mutate(gene_type=if_else(        
    padj > 0.05,"ns",if_else(          
      abs(log2FoldChange) < 1,"ns",
      if_else(log2FoldChange >=1,"up","down"))),
    FC=2**log2FoldChange)

统计上下调基因个数

df %>% group_by(gene_type) %>% 
  summarise(count=n())

自定义颜色

cols <- c("up [1395]"="#FF0000","down [1463]"="#00A08A","ns [28078]"="grey")

数据可视化

ggplot(df %>% mutate(gene_type=case_when(
  gene_type =="up" ~ "up [1395]",
  gene_type =="down" ~ "down [1463]",
  gene_type =="ns" ~ "ns [28078]")),aes(log2FoldChange,-log10(pvalue))) + 
  geom_point(aes(color=gene_type,size=abs(log2FoldChange)))+
  geom_hline(yintercept = -log10(0.05),linetype ="dashed") + 
  geom_vline(xintercept = c(-1,1),linetype = "dashed")+
  geom_label_repel(data=df %>%
                     filter(abs(log2FoldChange) >3,padj < 1e-100,
                            id %in% c("TF31923","TF00970","TF26429")),
                   aes(label=id))+
  scale_color_manual(values = cols) + 
  scale_size(range=c(0.1,3))+
  guides(size="none")+
  scale_x_continuous(breaks=c(seq(-10,10,2)),limits = c(-10,10))+
  theme(panel.grid.major=element_blank(), # 移除主网格线
        panel.grid.minor=element_blank(), # 移除次网格线
        panel.background = element_blank(), # 设置背景为空
        axis.title.x=element_text(color="black",size=11,margin = margin(t = 5)),
        axis.title.y=element_text(color="black",size=11,margin = margin(t = 5)),
        axis.text.x=element_text(color="black",margin = margin(t = 5)), # 设置X轴文本颜色
        axis.text.y=element_text(color="black",margin = margin(r = 5)), # 设置y轴文本颜色
        panel.border = element_rect(linetype = "solid",fill = NA), # 定义边框线条类型
        plot.margin=unit(c(0.5,0.5,0.5,0.5),units=,"cm"),
        legend.title = element_blank(),
        legend.key=element_blank(),   # 图例键为空
        legend.text = element_text(color="black",size=10), # 定义图例文本
        legend.spacing.x=unit(0,'cm'), # 定义文本书平距离
        legend.background=element_blank(), # 设置背景为空
        legend.box.background=element_rect(colour = "black"), # 图例绘制边框
        legend.box.margin = margin(1,1,1,1),
        legend.position = c(0,1),legend.justification = c(0,1))

喜欢的小伙伴欢迎关注我的公众号 ,下回更新不迷路

R语言数据分析指南,持续分享数据可视化的经典案例及一些生信知识,希望对大家

上一篇下一篇

猜你喜欢

热点阅读