曼哈頓圖--R可視化

曼哈頓圖(Manhattan plot)是一種GWAS分析中常用的展示基因組數據的散點圖。可以R語言中的qqman、CMplot及ggplot2三個包繪制曼哈頓圖。

基于qqman包繪制

1、安裝、加載R包

安裝包
#install.package("qqman")
#加載包
library(qqman)

2、數據

#加載數據——以qqman包自帶示例數據gwasresult數據為例
df1 <- gwasResults     #數據中SNP為SNP名稱,CHR為染色體編號,BP為堿基位置,P為p值
head(df1)              #預覽數據
image.png

3、繪圖

manhattan(df1,    #繪圖數據
          col = c('#30A9DE','#EFDC05','#E53A40','#090707'),    #交替使用顏色展示
          suggestiveline = -log10(1e-05),     #-log10(1e-5)處添加"suggestive"橫線
          genomewideline = -log10(5e-10),     #-log10(5e-10)處添加"genome-wide sigificant"橫線
          highlight = snpsOfInterest,     #內置高亮的snp數據, 也可以對snpOfInterest進行設置
          annotatePval = 0.05,      #標記p值小于0.05的點
          annotateTop = T,          #如果為T,則僅批注低于注解閾值的每個染色體上的頂部點,為F則標記所有小于注解閾值的點。
          main = "XXXXXXXX"       #標題
          )
image.png

基于CMplot包繪制

1、安裝、加載包

#安裝包
#install.package("CMplot")
#加載包
library(CMplot)

2、數據

#加載數據——以CMplot包自帶示例數據pig60k數據為例
data(pig60K)        #預覽數據
image.png

3、繪圖

#在工作目錄下會生成一系列圖
CMplot(pig60K,       #示例數據
       chr.den.col=c("black","green","red"),        #SNP密度展示
       file="jpg",        #繪制圖片類型
       memo="",        #輸出文件名中添加一個字符
       dpi = 600)        #繪制圖片的分辨率
CMplot(Pmap,
       col=c("#4197d8", "#f8c120", "#413496", "#495226",
             "#d60b6f", "#e66519", "#d581b7", "#83d3ad", "#7c162c", "#26755d"),
       bin.size=1e6, bin.range=NULL, bin.legend.num=10, pch=19, type="p",
       band=1, H=1.5, ylim=NULL, cex.axis=1, lwd.axis=1.5, cex.lab=1.5,
       plot.type="b", multracks=FALSE, points.alpha=100L, cex=c(0.5,1,1),
       r=0.3, outward=FALSE, ylab=expression(-log[10](italic(p))),
       ylab.pos=3, xticks.pos=1, mar = c(3,6,3,3), threshold = NULL,
       threshold.col="red", threshold.lwd=1, threshold.lty=2,
       amplify= TRUE, signal.cex = 1.5, signal.pch = 19,
       signal.col=NULL, signal.line=2, highlight=NULL, highlight.cex=1,
       highlight.pch=19, highlight.type="p", highlight.col="red",
       highlight.text=NULL, highlight.text.col="black", highlight.text.cex=1,
       highlight.text.xadj=NULL, highlight.text.yadj=NULL,
       highlight.text.font=3, chr.labels=NULL, chr.border=FALSE,
       chr.labels.angle=0, chr.den.col="black", chr.pos.max=FALSE, cir.band=1,
       cir.chr=TRUE, cir.chr.h=1.5, cir.legend=TRUE, cir.legend.cex=0.6,
       cir.legend.col="black", LOG10=TRUE, box=FALSE, conf.int=TRUE,
       conf.int.col=NULL, file.output=TRUE, file=c("jpg","pdf","tiff"),
       dpi=300, height=NULL, width=NULL, memo="", main="", main.cex=1.5,
       main.font=2, trait.legend.ncol=NULL, verbose=TRUE)
image.png
image.png
image.png
image.png

image.png

image.png

image.png

image.png

基于ggplot2包進行繪制

1、安裝、加載包

#安裝包
# install.packages("ggplot2")
# install.packages("tidyverse")
# install.packages("ggforce")
# install.packages("ggprism")
#加載包
library(ggplot2)
library(tidyverse)
library(ggforce)
library(ggprism)

2、數據及其處理

#數據,同樣以qqman包自帶數據gwasresult為例
df <- gwasResults
###數據處理
df %>%
  group_by(CHR) %>%
  summarise(df_chr_len=max(BP)) %>%      #計算染色體長度
  mutate(total = cumsum(df_chr_len) - df_chr_len) %>%
  select(-df_chr_len) %>%        #計算染色體初始位置
  left_join(df, ., by="CHR") %>%
  arrange(CHR, BP) %>%
  mutate( BPcum = BP + total)->df_SNP_position       #計算累計SNP的位置

head(df_SNP_position)        #預覽數據
image.png

3、繪圖

#X軸標簽位置
X_axis <-  df_SNP_position %>% group_by(CHR) %>% summarize(center=( max(BPcum) +min(BPcum) ) / 2 )     
#添加高亮和注釋信息:snpsOfInterest中的rs編號和P值大于10的點
data <- df_SNP_position %>%
  mutate( is_highlight=ifelse(SNP %in% snpsOfInterest, "yes", "no")) %>%
  mutate( is_annotate=ifelse(-log10(P)>10, "yes", "no"))
#繪圖
ggplot(data, aes(x=BPcum, y=-log10(P))) +
  geom_point(aes(color=as.factor(CHR)),alpha=0.8, size=1.5)+
  scale_color_manual(values = rep(c('#30A9DE','#EFDC05','#E53A40','#090707'), 22 ))+#顏色設置
  scale_x_continuous(label = X_axis$CHR, breaks= X_axis$center)+#設定X軸
  scale_y_continuous(expand = c(0, 0) ) +#去除繪圖區和X軸之間的gap
  geom_hline(yintercept = c(6, -log10(0.05/nrow(df_SNP_position))), #添加閾值線
             color = c('green', 'red'),size = 1.2,
             linetype = c("dotted", "twodash")) +
  geom_point(data=subset(data, is_highlight=="yes"), color="green",
             size=2)+facet_zoom(x = BPcum >= 3000 & BPcum <=3500)+#展示某一區域的p值情況
  theme_prism(palette = "flames",#使用ggprism包自帶主題
              base_fontface = "plain",
              base_family = "serif",
              base_size = 16,
              base_line_size = 0.8,
              axis_text_angle = 45)+
  theme(legend.position = "none",#去除圖例
        panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.line.x = element_line(),
        axis.line.y = element_line())
image.png

參考:

1)https://blog.csdn.net/ddxygq/article/details/103555955

2)https://mp.weixin.qq.com/s/IO5rqz8sXaYD5vc5EbkkPw

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

推薦閱讀更多精彩內容