ixxmu / mp_duty

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

图片复现 | 富集分析条形图-调整分面标记的位置 #5761

Closed ixxmu closed 3 hours ago

ixxmu commented 3 hours ago

https://mp.weixin.qq.com/s/1M_oTcH98zXmNTewfC8VcA

ixxmu commented 3 hours ago

图片复现 | 富集分析条形图-调整分面标记的位置 by 被炸熟的虾

偶然看到一张富集分析的展示结果,不同的通路类别分别展示,加了一个label以示区分。

Multi-omics and pharmacological characterization of patient-derived glioma cell lines. Nat Commun. 2024 Aug 8.  PMID: 39112531.

ggplot2本身自带了分面函数,大家应该都很熟悉,GO富集分析结果也常常按照BPCCMF分别展示:

仔细观察可以发现,原图将分面标注方向换到了对面。这样辅以通路标准到柱子上,空间节省了1/3

Step1:数据整理

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"))

Step2:绘图

相比于常规条形图,使用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))

被炸熟的虾
自己的摸索,发现问题麻烦告诉作者,光速回来改正