今天小果想通过ggplot2来绘制曼哈顿图,利用曼哈顿图展示微生物物种丰度差异,代码如下:
- 安装需要的R 包
install.packages(“ggplot2”)
install.packages(“tidyverse”)
install.packages(“ggrepel”)
- 载入需要的R包
library(ggplot2)
library(tidyverse)
library(ggrepel)
- 代码展示
#读入数据
df<-read.table(“OTU.txt”, header=T, row.names=1, sep=”\t”, comment.char=””)
#计算 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)
最终绘制出了想要的曼哈顿图,效果看起来还不错,有需要的可以借鉴学习,小果今天的分享就到这里。