ggplot2气泡图的又一个小例子

今天公众号的一位读者留言说要做气泡图。他的数据如下

image.png

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()
image.png
用class来映射颜色
ggplot(df,aes(x=ID,y=log2FC,color=Class))+
  geom_point()
image.png
用pvalue映射大小
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point()
image.png
更改点的大小
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point()+
  scale_size_continuous(range = c(1,10))
image.png
气泡图将透明度设置低一点可能会好看一点
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point(alpha=0.5)+
  scale_size_continuous(range = c(1,10))
image.png
将数据的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))
image.png

接下来就是美化

灰色背景不太喜欢,去掉
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()
image.png
现在是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()
image.png
根据自己的想法来填充颜色

首先准备 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)
image.png
将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")
image.png

这样在图上突出显示的是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")
image.png

现在又变成三角对应的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")
image.png
最后导出pdf文件手动修改pvalue的图例
image.png

-log2好像变换不太合适,暂时想不到比较好的办法了。
最终图反映的信息是,圆点代表p值小于0.05,圆点越大,p值越小。叶色映射的是不同的分类

欢迎大家关注我的公众号
小明的数据分析笔记本

你可能感兴趣的:(ggplot2气泡图的又一个小例子)