r语言ggplot2一夜多图_R语言ggplot2|玩转Manhattan图-你有被要求这么画吗?

Manhattan图算是GWAS分析的标配图了,可参考Bio|manhattan图进行绘制。

由于Manhattan点太多,后期AI/PS修改的话难度有点大,如果可以“个性化”绘制的话那是极好的!

一 载入R包,数据

1)载入数据处理的tidyverse包,使用qqman中gwasResults示例数据集

#载入R包#install.packages("qqman")library(qqman)library(tidyverse)#查看原始数据head(gwasResults)SNPCHRBP       P1rs1 1 10.91480602rs2 1 20.93707543rs3 1 30.28613954rs4 1 40.83044765rs5 1 50.64174556rs6 1 60.5190959

我们知道Manhattan图实际就是点图,横坐标是chr,纵坐标是-log(Pvalue) ,原始P值越小,-log转化后的值越大,在图中就越高。

原始数据中重要的“元素”都有了 ,我们自己的数据也是只需要这四列就可以了。注意绘制前需要转化一下:

2)处理原始数据---计算SNP的累计位置

# 1)计算chr长度chr_len%group_by(CHR)%>%summarise(chr_len=max(BP))# 2) 计算每条chr的初始位置chr_pos%mutate(total=cumsum(chr_len)-chr_len)%>%select(-chr_len)#3)计算累计SNP的位置Snp_pos%left_join(gwasResults,.,by="CHR")%>%arrange(CHR,BP)%>%mutate(BPcum=BP+total)#查看转化后的数据head(Snp_pos,2)SNPCHRBP       PtotalBPcum1rs1 1 10.9148060   0   12rs2 1 20.9370754   0   2

数据准备完成,开始绘图。

二 ggplot2绘制Manhattan图

1 纵坐标为P值转-log10()

ggplot(Snp_pos,aes(x=BPcum,y=-log10(P)))+geom_point(aes(color=as.factor(CHR)))

基本图形出来了,但是有点怪;不急,一点点改进:

横坐标标签设置在每个chr中间位置;

背景色去掉,线去掉等

去掉点和X轴之间的 “gap” (很多地方可用)

添加阈值线

2 绘制加强版Manhattan图

1) 准备X轴标签位置--在每条chr的中间

X_axis%group_by(CHR)%>%summarize(center=(max(BPcum)+min(BPcum) )/2)

2)绘制“改良版”Manhattan图

p

这时候是不是就可以了,🤭。

当然了既然是ggplot2绘制的Manhattan图(点图),那么关于点,线,坐标,主题的设置当然都可以设置了,看这里

3 玩转Manhattan图

1) 利用数据集自带的snpsOfInterest标示显著的位点,展示重要的基因信息

library(ggrepel)#准备数据data%# 添加高亮和注释信息:snpsOfInterest中的rs编号和P值大于6的点mutate(is_highlight=ifelse(SNP%in%snpsOfInterest,"yes","no"))%>%

mutate(is_annotate=ifelse(-log10(P)>6,"yes","no"))

#绘图

p1

如果我们自己的gwas结果数据是Gene的话,label更改即可标示基因。

2) 自定义重要的基因,标示

如果有某些“目的基因”,想查看这些基因的P值呢?

新加gene和gene_annotate列即可!

#准备数据,使用基础函数data

)

3)区域放大展示

重点展示某一区域的P值情况

library(ggforce)

data%# 添加高亮和注释信息:snpsOfInterest中的rs编号和P值大于6的点mutate(is_highlight=ifelse(SNP%in%snpsOfInterest,"yes","no"))%>%mutate(is_annotate=ifelse(-log10(P)>6,"yes","no"))p3 =3000&BPcum<=3500)+theme_bw()+theme(legend.position="none",panel.border=element_blank(),panel.grid.major.x=element_blank(),panel.grid.minor.x=element_blank())

4)plotly 交互展示

library(plotly)data%mutate(is_highlight=ifelse(SNP%in%snpsOfInterest,"yes","no"))%>%filter(-log10(P)>0.5) #过滤一些点,交互式压力小# 准备SNP展示的text信息data$text%round(2),"\nWhat else do you wanna know",sep="")p4

好吧,其实这个用处不太大,,,

以上就是ggplot2绘制一些常见的Manhattan图,好处当然就是兼容ggplot2的参数,也就可以根据需要自行设置。

猜你喜欢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值