利用ggplot2绘制曼哈顿图

今天小果想通过ggplot2来绘制曼哈顿图,利用曼哈顿图展示微生物物种丰度差异,代码如下:

  1. 安装需要的R 包

install.packages(“ggplot2”)

install.packages(“tidyverse”)

install.packages(“ggrepel”)

  1. 载入需要的R包

library(ggplot2)

library(tidyverse)

library(ggrepel)

  1. 代码展示

#读入数据

df<-read.table(“OTU.txt”, header=T, row.names=1, sep=”\t”, comment.char=””)

Dingtalk_20230220143853

#计算 x 轴标签、矩形区块对应的 x 轴位置

getBreak<-function(x,y){

freq<-as.vector(table(y))

half_freq<-freq%/%2

for (i in seq(2,length(freq))){

new_num<-freq[i]+freq[i-1]

freq[i]=new_num}

pos<-freq-half_freq

break_point<-as.vector(x[pos])

return(break_point)

}

#设置分组颜色

cols<-c(“#008087″,”#00A962″,”#86C03D”,”#74BC56″,

“#E53636″,”#3D7ABB”,”#EE8B15″,”#AF4592″,

“#7AC5C1″,”#906024″,”#6E1F86″,”#545556″)

#设置阈值线

threshold<–log10(0.05)

#筛选超过阈值线的点

gtext<-filter(df,df$P< 0.05)

#开始绘图

p<-ggplot(df, aes(x=OTU, y=NegativeLogP, color=Group, size=RA, shape=Level)) +

geom_point(alpha=.7,key_glyph=”point”)+

scale_shape_manual(values=c(16,1))+ #选择形状,nosig对应空心圆,enrich对应实心圆

scale_size_continuous(range = c(0.5,5),

breaks = c(0.05, 0.10,0.50,1.00,5.00),

labels = c(‘0.05’, ‘0.10’,’0.50′,’1.00′,’5.00′))+ #设置散点尺寸

guides(color=”none”,shape=”none”)+#隐藏图例

scale_x_discrete(breaks=getBreak(df$OTU,df$Group), labels=c(“Alphaproteobacteria”,”Betaproteobacteria”,”Gammaproteobacteria”,”Deltaproteobacteria”,”Acidobacteria”,”Actinobacteria”,”Bacteroidetes”,”Chloroflexi”,”Gemdfimonadetes”,”Firmicutes”,”Planctomycetes”,”Others”),

expand = expansion(mult = 0.03))+

geom_text_repel(aes(OTU,NegativeLogP,label=OTU),gtext,colour=’black’, size =5,box.padding = 1,

point.padding = 0.8,

segment.color = “black”,

show.legend = F)+#添加文字标签

geom_hline(yintercept=threshold, linetype=”dashed”, color=”red”)+

labs(x=””, y=”-log10(P)”)+

scale_color_manual(values = cols)+

theme(axis.line = element_line(size = 1),

panel.grid=element_blank(),

panel.background = element_rect(fill = ‘white’),

axis.text.x = element_text(angle = 45, hjust = 0.5, vjust = 0.5))

#保存图片

ggsave(“manhan.pdf”, p, height = 5,width = 10)

Dingtalk_20230220143738

最终绘制出了想要的曼哈顿图,效果看起来还不错,有需要的可以借鉴学习,小果今天的分享就到这里。