Closed ixxmu closed 3 hours ago
偶然看到一张富集分析的展示结果,不同的通路类别分别展示,加了一个label以示区分。
ggplot2
本身自带了分面函数,大家应该都很熟悉,GO富集分析结果也常常按照BP、CC与MF分别展示:
仔细观察可以发现,原图将分面标注方向换到了对面。这样辅以通路标准到柱子上,空间节省了1/3。
library(readxl)
exprSet <- as.data.frame(read_excel("./41467_2024_51214_MOESM5_ESM.xlsx",sheet = "Fig. 1D,E,F"))
head(exprSet)
# Pathway p.adj NES Subtype
# 1 VERHAAK_GLIOBLASTOMA_MESENCHYMAL 4.65e-09 2.973980 MES
# 2 HALLMARK_EPITHELIAL_MESENCHYMAL_TRANSITION 4.65e-09 2.723111 MES
# 3 HALLMARK_INTERFERON_GAMMA_RESPONSE 4.65e-09 2.534963 MES
# 4 HALLMARK_INFLAMMATORY_RESPONSE 4.65e-09 2.476059 MES
# 5 GOBP_GRANULOCYTE_MIGRATION 4.65e-09 2.423561 MES
# 6 GOBP_POSITIVE_REGULATION_OF_CYTOKINE_PRODUCTION_INVOLVED_IN_IMMUNE_RESPONSE 4.81e-08 2.382693 MES
exprSet$Pathway <- gsub("VERHAAK_","",exprSet$Pathway)
exprSet$Pathway <- gsub("HALLMARK_","",exprSet$Pathway)
exprSet$Pathway <- gsub("GOBP_","",exprSet$Pathway)
exprSet$Pathway <- gsub("GOMF_","",exprSet$Pathway)
exprSet$Pathway <- gsub("GOCC_","",exprSet$Pathway)
exprSet$Pathway <- gsub("GOCC_","",exprSet$Pathway)
exprSet$Pathway <- gsub("GOCC_","",exprSet$Pathway)
##首字母大写
exprSet$Pathway <- Hmisc::capitalize(tolower(exprSet$Pathway))
选择为OXPHOS示例:
exprSet0 <- exprSet[exprSet$Subtype == "OXPHOS",]
exprSet0$Group <- "OXPHOS-enriched pathways"
exprSet0$Pathway <- factor(exprSet0$Pathway,levels = rev(exprSet0$Pathway))
exprSet0[,c(1,3,5)]
# Pathway NES Group
#21 Structural_constituent_of_ribosome 3.849841 OXPHOS-enriched pathways
#22 Ribosomal_subunit 3.807352 OXPHOS-enriched pathways
#23 Mitochondrial_protein_containing_complex 3.447491 OXPHOS-enriched pathways
#24 Cotranslational_protein_targeting_to_membrane 3.421529 OXPHOS-enriched pathways
#25 Nuclear_transcribed_mrna_catabolic_process_nonsense_mediated_decay 3.338597 OXPHOS-enriched pathways
#26 Inner_mitochondrial_membrane_protein_complex 3.291726 OXPHOS-enriched pathways
#27 Oxidative_phosphorylation 3.286751 OXPHOS-enriched pathways
#28 Establishment_of_protein_localization_to_endoplasmic_reticulum 3.267272 OXPHOS-enriched pathways
#29 Myc_targets_v1 3.205170 OXPHOS-enriched pathways
#30 Respiratory_chain_complex 3.199812 OXPHOS-enriched pathways
设置主题:这里隐去了Y轴的坐标标签、刻度线
library(ggplot2)
mytheme <- theme(axis.text.x = element_text(hjust = 0.5,size = 20),
## 删去y轴label
axis.text.y = element_blank(),
## 删去y轴刻度线
axis.ticks.y = element_blank(),
## 删去x\y轴标题
axis.title.x = element_blank(),
axis.title.y = element_blank(),
plot.title = element_text(hjust = 0.5,size = 22),
legend.position = "none")
分面主题:不仅可以设置字体颜色、大小,也可以调整背景填充颜色
mytheme_strip <- theme(## 分面背景更改为红色
strip.background = element_rect(fill = c("#2b3990")),
## 分面字体更改为白色
strip.text = element_text(size = 20,colour = "white"))
相比于常规条形图,使用geom_text
函数将需要标注的文字写在柱子上,再加一个facet_grid
即可,详细的分面函数下一节总结吧。
p1 <- ggplot(data = exprSet0, aes(x = Pathway, y = NES)) +
geom_bar(stat = "identity", width = 0.8, fill = "#a6b3d7",alpha = 0.9) + #绘制条形图
geom_text(aes(y = 0, #控制文本标签起始位置
label = Pathway),
size = 6,hjust = 0) + #hjust = 0左对齐
scale_y_continuous(expand = c(0,0.05),limits = c(0,4.2)) +
facet_grid(Group~.) +
labs(x = NULL, y = "NES", title = NULL) +
coord_flip() + theme_bw() + mytheme + mytheme_strip
默认情况下,标签显示在图表的顶部facet_grid(.~Group)
和右侧facet_grid(Group~.)
。为了将分面标签放置在左侧,需要添加参数switch = "y"
。
switch = "x"
,则顶部标签将显示在底部。switch = "y"
,则右侧标签将显示在左侧。也可以设置为"both"
。p3 <- ggplot(data = exprSet0, aes(x = Pathway, y = NES)) +
geom_bar(stat = "identity", width = 0.8, fill = "#a6b3d7",alpha = 0.9) + #绘制条形图
geom_text(aes(y = 0, #控制文本标签起始位置
label = Pathway),
size = 6,hjust = 0) + #hjust = 0左对齐
scale_y_continuous(expand = c(0,0.05),limits = c(0,4.2)) +
facet_grid(Group~.,switch = "y") +
labs(x = NULL, y = NULL, title = NULL) +
coord_flip() + theme_bw() + mytheme + mytheme_strip
调整颜色分别绘制三张图拼接:
library(patchwork)
p1/p2/p3 + plot_layout(heights = c(1,1,1))
https://mp.weixin.qq.com/s/1M_oTcH98zXmNTewfC8VcA