ggplot2是一款強大的繪圖R包,今天的筆記內(nèi)容是學(xué)習(xí)使用ggplot2來繪制一幅熱圖,并進行美化調(diào)整。需要加載的包有兩個:ggplot2、reshape2。
如果你也想跟著筆記一起學(xué)習(xí),請訪問鏈接下載腳本:
https://down.jewin.love/?f=/Rscript/
訪問上面的網(wǎng)址即可下載使用,也可以直接在Rstudio中運行下面這一句代碼,則會自動在當(dāng)前工作路徑下生成11副PDF圖片結(jié)果,稍加修改輸入數(shù)據(jù)就能生成其他的熱圖。
source("https://down.jewin.love/?f=/Rscript/heatmap.R")
接下來利用示例數(shù)據(jù)進行簡單的流程介紹:
如何繪制一幅熱圖?
前期準(zhǔn)備與數(shù)據(jù)創(chuàng)建
首先,需要安裝并加載這兩個R包。
install.packages("ggplot2")
install.packages("reshape2")
library(ggplot2)
library(reshape2)
創(chuàng)建示例數(shù)據(jù),并輸出數(shù)據(jù)查看是否正常。
> data <- c(1:6,6:1,6:1,1:6, (6:1)/10,(1:6)/10,(1:6)/10,(6:1)/10,1:6,6:1,6:1,1:6,6:1,1:6,1:6,6:1)
> data #查看當(dāng)前數(shù)據(jù)
[1] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0
[23] 5.0 6.0 0.6 0.5 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.4 0.5 0.6 0.1 0.2 0.3 0.4 0.5 0.6 0.6 0.5
[45] 0.4 0.3 0.2 0.1 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0
[67] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0 1.0 2.0 3.0 4.0
[89] 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0
將輸入的data數(shù)據(jù)轉(zhuǎn)化成數(shù)據(jù)框格式,并更改列名和行名,查看前五行數(shù)據(jù)觀察是否正常。
> data <- as.data.frame(matrix(data,ncol = 12,byrow = T)) #轉(zhuǎn)化成數(shù)據(jù)框
> colnames(data) <- c("Zygote","2_cell","4_cell","8_cell","Morula","ICM","ESC","4 week PGC","7 week PGC","10 week PGC","17 week PGC", "OOcyte")
> rownames(data) <- paste("Gene",1:8,sep ="_")
> head(data,5) #輸出前五行
Zygote 2_cell 4_cell 8_cell Morula ICM ESC 4 week PGC 7 week PGC 10 week PGC
Gene_1 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0
Gene_2 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0
Gene_3 0.6 0.5 0.4 0.3 0.2 0.1 0.1 0.2 0.3 0.4
Gene_4 0.1 0.2 0.3 0.4 0.5 0.6 0.6 0.5 0.4 0.3
Gene_5 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0
新建一列命名為id,內(nèi)容為每行數(shù)據(jù)的行名,這樣做的目的是為了后續(xù)將數(shù)據(jù)用melt函數(shù)轉(zhuǎn)化為長類型(每一行的value數(shù)值變量只有一項,作圖所需數(shù)據(jù)格式),查看數(shù)據(jù)前5行進行觀察。
> data$id <- rownames(data) #新建一列(ID),內(nèi)容為數(shù)據(jù)的行名
> data_m <- melt(data,id.vars=c("id")) #將原來的數(shù)據(jù)轉(zhuǎn)化成長數(shù)據(jù)格式,并以ID列為主因素
> head(data_m,5) #查看轉(zhuǎn)換后的結(jié)果,該數(shù)據(jù)將用于后續(xù)的流程
id variable value
1 Gene_1 Zygote 1.0
2 Gene_2 Zygote 6.0
3 Gene_3 Zygote 0.6
4 Gene_4 Zygote 0.1
5 Gene_5 Zygote 1.0
開始繪圖
利用ggplot函數(shù)繪制熱圖,步驟:先初始化坐標(biāo)軸(x= ,y= )然后設(shè)置填充類型和填充數(shù)據(jù),在繪圖函數(shù)后用+連接主題修改函數(shù),可以在不斷地修飾美化圖片。
p <- ggplot(data_m,aes(x=variable,y=id)) #初始化,讀入數(shù)據(jù),設(shè)置x軸和y軸
p <- p + geom_tile(aes(fill=value))
#設(shè)置填充項為value值,繪制熱圖
p #查看生成的結(jié)果plot,在屏幕右下角處plot顯示

保存圖片
利用ggsave函數(shù)來保存生成的圖片結(jié)果,這里演示將p保存到當(dāng)前目錄下,命名為my plot 1 .pdf,之后可以在相應(yīng)目錄下找到這張照片,無損矢量圖方便修改。
ggsave(p,filename = "my plot 1.pdf",width = 10,
height = 15,units = "cm",colormodel="srgb")
#保存當(dāng)前文件,生成的文件在當(dāng)前工作目錄下保存
剛剛那張圖橫軸的標(biāo)簽有的重疊到一起了,這樣不好。那么如何對生成的熱圖進行后續(xù)調(diào)整呢?
美化熱圖
tips:切換顯示主題與顏色
theme函數(shù)用于設(shè)置主題
axis.text.x表示x軸標(biāo)簽文本
element_text用來更改文本的角度(angle)、位置(hjust、vjust)
scale_fill_gradient表示用雙色梯度方式填充顯示。
p <- p + theme(axis.text.x = element_text(
angle = 45,hjust = 1,vjust = 1)) #設(shè)置標(biāo)簽的顯示方式
p <- p + scale_fill_gradient(
low="white",high = "red") #設(shè)置填充顏色
p #查看結(jié)果

切換顯示類型與數(shù)據(jù)展示方式
比如,我想在熱圖中同時展示兩種顏色填充和數(shù)值,需要在上面的代碼基礎(chǔ)上略加修改,添加新的繪圖參數(shù)。
p <- ggplot(data_m, #輸入文件
aes(x=variable,y=id)) + #初始化坐標(biāo)軸
xlab("samples") + #x軸標(biāo)簽
theme_bw() + #設(shè)置系統(tǒng)自帶主題
theme(panel.grid.major = element_blank()) + #設(shè)置主項網(wǎng)格
theme(legend.key=element_blank()) + #去掉背景顏色
theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1)) + #設(shè)置坐標(biāo)軸標(biāo)簽
theme(legend.position="top") + #設(shè)置圖例的位置
geom_tile(aes(fill=value)) + #設(shè)置填充的值
scale_fill_gradient(low = "white", high = "red") + #設(shè)置顏色梯度
geom_point(aes(color=value), size=6) + #設(shè)置點的顏色和大小
geom_text(aes(label=value)) #設(shè)置文本顯示數(shù)值
p #輸出圖片

試一試:重新更換一種主題樣式,將紅色填充去掉,并改為藍色圓點加數(shù)值顯示。
p <- ggplot(data_m,aes(x=variable,y=id)) +
xlab("samples") + theme_bw() +
theme(panel.grid.major = element_blank()) +
theme(legend.key = element_blank()) +
theme(axis.text.x = element_text(angle = 45,hjust = 1,vjust = 1)) +
theme(legend.position="top")+
geom_point(aes(color= value),size=6) +
scale_color_gradient(low = "white",high = "blue") +
geom_text(aes(label=value))
p

本節(jié)筆記到這里結(jié)束,感謝你的瀏覽,如果感覺有用歡迎轉(zhuǎn)發(fā)分享,明天繼續(xù)分享繪制熱圖過程中遇到數(shù)據(jù)的差異比較大時處理方法,對原始數(shù)據(jù)進行轉(zhuǎn)化的技巧和應(yīng)用。
參考引用:http://www.ehbio.com/Bioinfo_R_course/Rplots.html#ggplot2_heatmapmeihua
本文由mdnice多平臺發(fā)布