今天公众号的一位读者留言说要做气泡图。他的数据如下
ID是X,log2FC用作y,class是分类变量用来填充颜色 范围是A到I。P值用来映射点的大小。
还有一个要求是 能否突出p值<0.05?,我目前想到的办法是按0.05为界给P值分组,然后用不同形状的点来映射。
首先是读入数据
df<-read.csv("bubble_plot.csv",
header=T,stringsAsFactors = F)
最基本的散点图
library(ggplot2)
ggplot(df,aes(x=ID,y=log2FC))+
geom_point()
用class来映射颜色
ggplot(df,aes(x=ID,y=log2FC,color=Class))+
geom_point()
用pvalue映射大小
ggplot(df,aes(x=ID,y=log2FC,
color=Class,size=pvalue))+
geom_point()
更改点的大小
ggplot(df,aes(x=ID,y=log2FC,
color=Class,size=pvalue))+
geom_point()+
scale_size_continuous(range = c(1,10))
气泡图将透明度设置低一点可能会好看一点
ggplot(df,aes(x=ID,y=log2FC,
color=Class,size=pvalue))+
geom_point(alpha=0.5)+
scale_size_continuous(range = c(1,10))
将数据的pvalue按照0.05分组,然后映射不同的形状
df$group<-ifelse(df$pvalue<0.05,"pvalue<0.05",
"pvalue>=0.05")
ggplot(df,aes(x=ID,y=log2FC,size=pvalue,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))
接下来就是美化
灰色背景不太喜欢,去掉
ggplot(df,aes(x=ID,y=log2FC,size=pvalue,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()
现在是pvalue值大于0.05对应的是三角,pvalue值小于0.05对应的是圆圈,如果想对调位置的话
df$group<-factor(df$group,levels = c("pvalue>=0.05",
"pvalue<0.05"))
ggplot(df,aes(x=ID,y=log2FC,size=pvalue,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()
根据自己的想法来填充颜色
首先准备 11个颜色,class有多少个类别就准备多少个颜色
cols<-c("#0055AA","#C40003","#00C19B","#EAC862","#7FD2FF","#007ED3","#B2DF8A","#FFACAA","#FF9D1E","#C3EF00","#CAB2D6","#894FC6")
ggplot(df,aes(x=ID,y=log2FC,size=pvalue,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()+
scale_color_manual(values = cols)
将x轴和y轴的标签转换成自己想要的
ggplot(df,aes(x=ID,y=log2FC,size=pvalue,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()+
scale_color_manual(values = cols)+
labs(x="",y="log2FC")
这样在图上突出显示的是P值大于0.05的那些点,如果想突出显示p值小于0.05的点
我暂时先到一个办法是对p值进行-log2转换,这样原来的小值就变成大值了,试一下这个想法
df$pvalue1<- -log2(df$pvalue)
ggplot(df,aes(x=ID,y=log2FC,size=pvalue1,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()+
scale_color_manual(values = cols)+
labs(x="",y="log2FC")
现在又变成三角对应的pvalue是小于0.05的,把它改成圆圈
df$group<-factor(df$group,
levels = c("pvalue<0.05",
"pvalue>=0.05"))
ggplot(df,aes(x=ID,y=log2FC,size=pvalue1,
color=Class,shape=group))+
geom_point(alpha=0.5)+
scale_size_continuous(range=c(1,10))+
theme_bw()+
scale_color_manual(values = cols)+
labs(x="",y="log2FC")
最后导出pdf文件手动修改pvalue的图例
-log2好像变换不太合适,暂时想不到比较好的办法了。
最终图反映的信息是,圆点代表p值小于0.05,圆点越大,p值越小。叶色映射的是不同的分类
欢迎大家关注我的公众号
小明的数据分析笔记本