Closed ixxmu closed 1 year ago
关于文献常用的两种富集条形图的绘制可戳往期:《拿捏2种富集条形图绘制方法!》
不过使用常规富集条形图展示富集结果时,无法在图中显示上下调。那如何在一图中展现上下调结果呢?今天就来学习一种双侧柱形图的绘制方法,复现案例如下图:
(Nat Commun,2022)
使用这样的双侧条形图,可以在一张图中轻松展示上调和下调基因(log2FC)的KEGG或GO富集结果,又或是用于展示GSEA的正负ES/NES得分等。
且这张图中的pathway标签位置分别位于条形图左右两测而非仅全在左边,也是今天我们需要掌握的重点。话不多说,下面开始今天的学习,由浅入深、层层递进、包学包会!
#相关R包载入:
library(tidyverse)
library(ggplot2)
library(cols4all)
library(patchwork)
#测试数据读入:
##将上下调数据通过正负区分
dt <- read.csv('testdt.csv',header = T)
head(dt)
tail(dt)
#添加上下调分组标签:
dt$group <- case_when(dt$LogP > 0 ~ 'up',
dt$LogP < 0 ~ 'down')
head(dt)
#指定因子;调整顺序:
dt$Description <- factor(dt$Description,levels = rev(dt$Description))
#基础版上下调富集柱形图绘制:
p <- ggplot(dt,
aes(x =LogP, y = Description, fill = group)) + #数据映射
geom_col() + #绘制添加条形图
theme_bw()
p
#自定义主题调整:
mytheme <- theme(
legend.position = 'none',
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line.x = element_line(color = 'grey60',size = 1.1),
axis.text = element_text(size = 12)
)
p1 <- p + mytheme
p1
#先根据上下调标签拆分数据框:
up <- dt[which(dt$LogP > 0),]
down <- dt[which(dt$LogP < 0),]
#添加上调pathway标签:
p2 <- p1 +
geom_text(data = up,
aes(x = -0.2, y = Description, label = Description),
size = 3.5,
hjust = 1) #标签右对齐
p2
#添加下调pathway标签:
p3 <- p2 +
geom_text(data = down,
aes(x = 0.2, y = Description, label = Description),
size = 3.5,
hjust = 0) #标签左对齐
p3
#继续调整细节:
p4 <- p3 +
scale_x_continuous(breaks=seq(-4, 6, 2)) + #x轴刻度修改
labs(x = 'log(Pvalue)', y = ' ', title = 'Enriched Pathway') + #修改x/y轴标签、标题添加
theme(plot.title = element_text(hjust = 0.5, size = 14)) #主标题居中、字号调整
p4
#颜色修改:
c4a_gui()
mycol <- c4a('bright',2)
mycol
p5 <- p4 +
scale_fill_manual(values = mycol)
p5
#最后添加上下调提示标签:
p6 <- p5 +
geom_text(x = 6, y = 14, label = "Up", size = 6, color = '#EE6677') +
geom_text(x = -4.5, y = 3.5, label = "Down", size = 6, color = '#4477AA')
p6
#对比一下两种样式:
p + p6
基迪奥旗下绘图公众号
分享科研绘图技能与工具
欢迎关注与转发~
你的好友拍了拍你
并请你帮她点一下“分享”~
https://mp.weixin.qq.com/s/aVy5ubaKc6Q8_wf-R9TVGQ