熱圖不隻是差異基因表達,機器學習領域一樣使用
熱圖可以實作“生信”領域的差異表達基因,展示在不同分組樣品中的表達水準;一般一清單示一個樣品,一行表示一個基因,其中的顔色表示的相對表達值。

實際上,熱圖還與“高大上”的晶片設計、機器學習有着密切的關系;畢竟原理相通,核心的東西隻有那麼“一套把戲”而已。
在晶片設計、機器學習領域,隻需要把表達的資訊名稱對應上“晶片引腳”~“電平信号”或者“圖像噪聲”~“算法”,一樣可以實作!R最大的優勢就是資料資訊可視化能力。
熱圖本質上就是聚類的可視化。在 R 中,基礎包 stats 提供了一個層次聚類的函數hclust,即 Hierarchical Clustering 的縮寫。該函數的基本思路是:
- 将需要聚類的對象單獨作為一類 cluster;
- 根據算法(比如 complete linkage)将兩個最相似的 cluster 聚為一類;
- 重複 2 過程,直到所有 cluster 都聚為一類。
太陽花圖用來克服散點圖中資料點重疊問題
太陽花圖(sunflower plot),也稱為向日葵散點圖;太陽花圖是在特定的圖形位置上使用不同的字元。
library(car); cc<-Vocab; names(cc)
[1] "year" "sex" "education" "vocabulary"
plot(cc[,3:4],col=rainbow(22),cex=2,pch=17,las=1,col.axis='blue',ann=F,tck=0.01)
資料集cc共有30351個資料點,在上圖中無法看出哪些資料點存在重疊?太陽花圖可以在有重疊的地方用一朵“向日葵”的花瓣數目來表示重疊資料的個數;下圖就可以實作對分散資料交叉重疊情況的比較。
sunflowerplot(cc[,3:4],seg.col='blue',cex=1.6,col='red')
圖中左上角資料點隻有上、下兩個花瓣,代表該資料點大于10和小于10的位置各有一個資料;如果某點花瓣數量很多,表示該點位置前後左右重疊的資料量越大;藍色實心圓圈表示有很多很多的資料點。
随機資料的“太陽花”
aaa<-round(rnorm(100));aaa<-rep(aaa,5);aaa<-jitter(aaa,3);aaa
par(las=1,col.axis='lightblue',tck=0.01,ann=F)
sunflowerplot(1:500/500,sample(aaa,500),digits=1,pch=13,cex=1.1,col='red',seg.col='blue',seg.lwd=2)
sunflowerplot(rnorm(500),sample(aaa,500),digits=1,pch=19,cex=1.1,col='red',seg.col='blue',seg.lwd=2)
digits | 當number參數未被指定, x資料列在計算重數之前y四舍五入到digits有效數字。 |
如果資料量不是太大,可以在使用“軸須圖”的方式來顯示資料量的分布密度;
hist(cc[1:290,4],prob=T,breaks=9,labels=T,col=rainbow(9),ann=F)
rug(jitter(cc[1:290,4],amount=0.7), col = "red")
lines(density(cc[1:290,4]),col='blue',lwd=3,lty=3)
花瓣圖充分展示分組資訊
繪制venn圖最多支援5組資料,當組别數大于5時,venn圖即使能夠畫出來,看上去也非常複雜,不夠直覺;在實際的資料分析中,組别大于5的情況還是經常遇到的,這時就可以考慮用花瓣圖來進行資料的可視化。
花瓣圖中,所有樣本都有共同的資訊,但是每個樣本也有獨有的資訊;花瓣圖既美觀,展示的資訊也很直覺。如下圖所示:
相關代碼參見:R語言繪制花瓣圖flower plot - 廬州月光 - 部落格園
上圖對其中代碼的相關參數作了系統的調整,也調整了部分文本内容,還改變了顔色的顯示及圖形布局的設計;其實,隻要熟悉底層的繪圖指令,很快就能實作。
最高境界的“圈圖”的實作
“圈圖”尤其适合“生信”中的基因表達;隻要安裝上circlize包,實作看似極為“高大上”的圈圖,也是分分鐘的事情。