ggplot2氣泡圖的又一個(gè)小例子

今天公眾號(hào)的一位讀者留言說要做氣泡圖。他的數(shù)據(jù)如下

image.png

ID是X,log2FC用作y,class是分類變量用來填充顏色 范圍是A到I。P值用來映射點(diǎn)的大小。

還有一個(gè)要求是 能否突出p值<0.05?,我目前想到的辦法是按0.05為界給P值分組,然后用不同形狀的點(diǎn)來映射。

首先是讀入數(shù)據(jù)
df<-read.csv("bubble_plot.csv",
             header=T,stringsAsFactors = F)
最基本的散點(diǎn)圖
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
更改點(diǎn)的大小
ggplot(df,aes(x=ID,y=log2FC,
              color=Class,size=pvalue))+
  geom_point()+
  scale_size_continuous(range = c(1,10))
image.png
氣泡圖將透明度設(shè)置低一點(diǎn)可能會(huì)好看一點(diǎn)
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
將數(shù)據(jù)的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
現(xiàn)在是pvalue值大于0.05對應(yīng)的是三角,pvalue值小于0.05對應(yīng)的是圓圈,如果想對調(diào)位置的話
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
根據(jù)自己的想法來填充顏色

首先準(zhǔn)備 11個(gè)顏色,class有多少個(gè)類別就準(zhǔn)備多少個(gè)顏色

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軸的標(biāo)簽轉(zhuǎn)換成自己想要的
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的那些點(diǎn),如果想突出顯示p值小于0.05的點(diǎn)

我暫時(shí)先到一個(gè)辦法是對p值進(jìn)行-log2轉(zhuǎn)換,這樣原來的小值就變成大值了,試一下這個(gè)想法

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

現(xiàn)在又變成三角對應(yīng)的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
最后導(dǎo)出pdf文件手動(dòng)修改pvalue的圖例
image.png

-log2好像變換不太合適,暫時(shí)想不到比較好的辦法了。
最終圖反映的信息是,圓點(diǎn)代表p值小于0.05,圓點(diǎn)越大,p值越小。葉色映射的是不同的分類

歡迎大家關(guān)注我的公眾號(hào)
小明的數(shù)據(jù)分析筆記本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容