首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >答公众号读者的问题~ggplot2气泡图的又一个小例子

答公众号读者的问题~ggplot2气泡图的又一个小例子

作者头像
用户7010445
发布2020-11-06 01:01:09
发布2020-11-06 01:01:09
1.2K0
举报

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

image.png

ID是X,log2FC用作y,class是分类变量用来填充颜色 范围是A到I。P值用来映射点的大小。

还有一个要求是 能否突出p值<0.05?,我目前想到的办法是按0.05为界给P值分组,然后用不同形状的点来映射。

首先是读入数据
代码语言:javascript
复制
df<-read.csv("bubble_plot.csv",
             header=T,stringsAsFactors = F)
最基本的散点图
代码语言:javascript
复制
library(ggplot2)
ggplot(df,aes(x=ID,y=log2FC))+
  geom_point()

image.png

用class来映射颜色
代码语言:javascript
复制
ggplot(df,aes(x=ID,y=log2FC,color=Class))+
  geom_point()

image.png

用pvalue映射大小
代码语言:javascript
复制
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point()

image.png

更改点的大小
代码语言:javascript
复制
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point()+
  scale_size_continuous(range = c(1,10))

image.png

气泡图将透明度设置低一点可能会好看一点
代码语言:javascript
复制
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分组,然后映射不同的形状
代码语言:javascript
复制
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

接下来就是美化

灰色背景不太喜欢,去掉
代码语言:javascript
复制
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对应的是圆圈,如果想对调位置的话
代码语言:javascript
复制
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有多少个类别就准备多少个颜色

代码语言:javascript
复制
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轴的标签转换成自己想要的
代码语言:javascript
复制
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转换,这样原来的小值就变成大值了,试一下这个想法

代码语言:javascript
复制
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的,把它改成圆圈

代码语言:javascript
复制
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值越小。叶色映射的是不同的分类

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接下来就是美化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档