ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

大佬高分文章中的富集条形图怎么画?轻松展示上下调! #3197

Closed ixxmu closed 1 year ago

ixxmu commented 1 year ago

https://mp.weixin.qq.com/s/aVy5ubaKc6Q8_wf-R9TVGQ

ixxmu commented 1 year ago

大佬高分文章中的富集条形图怎么画?轻松展示上下调! by SCIPainter

关于文献常用的两种富集条形图的绘制可戳往期:《拿捏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)

大家可以分别使用上调和下调基因完成富集,将下调基因富集到的通路p值标注为负数,和上调做区分,最后整合成范例中的长数据格式即可。

#添加上下调分组标签:
dt$group <- case_when(dt$LogP > 0 ~ 'up',
dt$LogP < 0 ~ 'down')
head(dt)

#指定因子;调整顺序:
dt$Description <- factor(dt$Description,levels = rev(dt$Description))
1. 常规版上下调富集条形图绘制


#基础版上下调富集柱形图绘制:
p <- ggplot(dt,
aes(x =LogP, y = Description, fill = group)) + #数据映射
geom_col() + #绘制添加条形图
theme_bw()
p


基础版也就是我们最简单和常用的一种表达,即标签全显示在y轴左侧。喜欢这个样式的童鞋可以画到这里,或再改个配色即可。
2. 进阶版上下调富集条形图绘制


下面开始进阶版的学习。首先,我们需要去掉边框、背景线和全部通路标签:

#自定义主题调整:
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


两种样式可按自己的喜好选择!如果还想对重点/目标/显著通路用不同颜色进行强调,推荐大家使用AI调整,相比R更为便捷。

好啦,今天的分享就到这里!

参考文献


Yu, W., Wang, Z., Yu, X. et al. Kir2.1-mediated membrane potential promotes nutrient acquisition and inflammation through regulation of nutrient transporters. Nat Commun 13, 3544 (2022).

*未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。

# SCIPainter

基迪奥旗下绘图公众号

分享科研绘图技能与工具

欢迎关注与转发~


你的好友拍了拍你

并请你帮她点一下“分享”~