今天公眾號(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ù)分析筆記本