GSEA軟件的二次作圖

我們知道,用GSEA的java軟件分析的結果之后,默認的圖是png,而且只有72 dpi,比如下面這樣的

image.png

其實顏值也還好,但是很模糊,這是很不方便用于發文章的,那么有沒有一些二次作圖的方法呢?
答案是肯定的,不僅有,而且還有很多方法,不知道你們有沒有發現本地文件夾里其實還有一個edb文件夾,而這個文件夾只有三個文件,一個rnk,一個gmt,另外就是results.edb,實際上所有的圖片信息都在results.edb里,在這里展示一些我收集的二次繪圖辦法。

Rtoolbox二次繪圖

Rtoolbox這個包目前只能在Github上安裝,里面也只有兩個函數replotGSEA()OverviewPlot(),由于Github經常訪問不了,所以可以導入到Gitee上了,安裝起來也很簡單。

remotes::install_git('https://gitee.com/swcyo/Rtoolbox')

而關于這個包的replotGSEA()的函數使用也很簡單

replotGSEA(path, gene.set, class.name, metric.range, enrichment.score.range)

比如我的本地結果都在~/my_analysis.GseaPreranked.1664378586466 這個文件夾里,里面有很多結果,我們只需要提取相應的通路名稱,設置一些簡單的函數就可以出一個pdf的圖了,比如我要提取PPAR通路的結果,只需要一個函數即可

library(Rtoolbox) ##加載R包
replotGSEA(path = '~/my_analysis.GseaPreranked.1664378586466', ##設置本地文件夾路徑
           gene.set = "KEGG_PPAR_SIGNALING_PATHWAY%HSA03320", ## 提取PPAR通路
           class.name = "PPAR_SIGNALING_PATHWAY", ##定義圖中間的名稱
           ## enrichment.score.range= c(-1, 1) ###設置富集分數范圍,一般默認即可
           )

這時候會再彈出一個R的窗口(Mac系統可能提示要安裝Quartz),這時候會顯示一個圖,顯示了一個比自帶更好看的圖,還能顯示p、FDR和NES的值,我們適當的拉伸圖片的長寬,然后點Save可以保存為pdf,之后再自己編輯結果,見下圖所示。與原始圖比較簡直就是天壤之別吧。

replotGSEA

然而,這個方案有兩個缺陷

  1. 不能在一張圖片上設置多條通路
  1. 不能使用代碼自由保存圖片格式和大小

gseaplot_modified函數二次繪圖

使用這個函數其實純屬于不講武德的方法,完完全全就是調用Rtoolbox這個包的replotGSEA()繪圖,唯一的區別就是這個函數不需要安裝Rtoolbox這個包,而是直接定義函數,要說區別吧,我仔細對比了一些源代碼R/ReplotGSEA.R,也就是在圖片的設置上有非常非常非常細微的差距而已。。。

因為兩個函數沒有本質差異,所以我也就不放結果了,需要的還不如直接復制R/ReplotGSEA.R這個鏈接里的函數,這沒有什么好說的了。。。

基于ggplot2的繪圖

這個教程來自于GSEA自定義做圖 - 簡書 (jianshu.com),當然最好看的肯定是使用clusterProfiler計算好的結果,然后使用enrichplot包的gseaplot2()函數來繪圖,當然我們也是可以借鑒Y叔的畫圖思路要成圖,但這個要求太高。這個教程其實還是在Rtoolbox的基礎上進行二次修改,將replotGSEA()函數的作圖取消,改成單獨提取rank和ES的值,然后使用ggplot2拼圖。原理無非就是在結果文件夾中有個edb文件夾,里面又有一個.edb 和 .rank文件,這個文件就是做圖的原始文件,如果你動手能力強,可以封裝成一個函數,也可以自己開發一個包。

使用修改的函數直接提取數據作圖。然而對于單個GSEA而已,GSEA的文件夾里還有png圖和tsv的表格(很久以前是xls),網上當然也有一些教程,我們可以先看看tsv的結果,比如我們繼續使用PPAR通路的表格,可以看到表格里有SYMBOLRANK.IN.GENE.LISTRANK.METRIC.SCORERUNNING.ES等信息。
我們先把表格讀進來

data<-read.delim("~/my_analysis.GseaPreranked.1664378586466/KEGG_PPAR_SIGNALING_PATHWAY%HSA03320.tsv")
## 看看數據分布
head(data)
##    NAME SYMBOL RANK.IN.GENE.LIST RANK.METRIC.SCORE RUNNING.ES CORE.ENRICHMENT
## 1 row_0   MMP1               265         0.4223908 0.03071519              No
## 2 row_1    ME1               368         0.3963699 0.06376065              No
## 3 row_2   OLR1               567         0.3652790 0.09122010              No
## 4 row_3   SCD5              1024         0.3145396 0.10664627              No
## 5 row_4    UBC              1589         0.2741413 0.11529607              No
## 6 row_5  FABP5              2359         0.2328998 0.11430056              No
##    X
## 1 NA
## 2 NA
## 3 NA
## 4 NA
## 5 NA
## 6 NA

GSEA二次繪圖,主要是三部分拼圖,第一部分是曲線,第二部分是網格線,第三部分是底下的曲線,可以使用的辦法很多,重點是知道圖的x軸和y軸是什么,推薦使用ggplot2畫圖,當然如果你想省事,用ggpubr更簡單

我們先畫最上面的圖,可以使用geom_line畫出,見下面所示。

library(ggplot2)
p1<-ggplot(data) +
  aes(x = RANK.IN.GENE.LIST, y = RUNNING.ES) + #x軸是rank值,y軸是ES值
  geom_line(size = 1, colour = "#f87669") +
  labs( y = "Enrichment score (ES)",  title = "PPAR SIGNALING PATHWAY",x=NULL) +
  theme_bw(base_size = 12)+ #設置主題和字體大小
  theme(axis.title.x=element_blank(),axis.text.x=element_blank(), axis.ticks.x=element_blank(),## 將x軸文字清空
        plot.title=element_text(hjust=0.5))+ #設置標題居中
  scale_x_continuous(expand = c(0, 0)) + #取消x軸左右的空白
  geom_hline(yintercept = 0, linetype = "dashed") #添加ES為0的基準線
p1

GSEA上部分的曲線圖

接著我們畫中間的部分,見下圖所示。

p2<-ggplot(data, aes(x = RANK.IN.GENE.LIST)) +
    geom_linerange(aes(ymin=-min(RANK.IN.GENE.LIST), ymax=max(RANK.IN.GENE.LIST))) +
    xlab(NULL) + ylab(NULL) + theme_bw()+
    theme(legend.position = "none",
          plot.margin = margin(t=-.1, b=0,unit="cm"),
          axis.ticks = element_blank(),
          axis.text = element_blank(),
          axis.line.x = element_blank()) +
    scale_x_continuous(expand=c(0,0)) +
    scale_y_continuous(expand=c(0,0))
p2
GSEA中間部分

最后下面的rank部分,見下圖所示。

p3<-ggplot(data) +
  aes(x = RANK.IN.GENE.LIST, y = RANK.METRIC.SCORE) +
  geom_area(size = 1.5,fill='gray30') +
  theme_bw(base_size = 12)+ ylab("Ranked List Metric")+xlab("Rank in Ordered Dataset") +
  scale_x_continuous(expand=c(0,0))

GSEA下面部分

最后,將三張圖拼成一張圖即可,見最終所示。

library(patchwork)

p1/p2/p3+plot_layout(heights = c(0.5,0.2,0.3))
ggplot2-GSEA

最后,三張圖其實都是一樣的


最后的全家福
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容