統計和繪圖之間界限越來越模糊;
組合圖形是趨勢;
示意圖或者照片圖像和圖表逐漸結合;
R語言繼續發光發熱。ggplot是核心。
在近年來,隨著作圖工具發展,我們越來越自由,更加可以隨心所欲出圖。ggplot的出現讓圖形的繪製更加簡單。人們更加追求組合圖形的繪製。尤其是大文章,對組合圖形的熱度不減。
科研圖表複雜度提高和色彩運用更加注重美學特徵,這已經相當明顯了,之後會有一篇帖子專門論述這兩個特徵。今天我們來談談以上的三個特徵。那就是組合圖表熱。其實我們仔細思考,之前的雙坐標圖形就是一種簡單的組合圖表,到現在普遍的箱線圖和散點圖的結合圖表:可用於展示樣本總體和細節,到異曲同工小提琴圖和散點。當然隨著這些基本的組合圖形逐漸滿足不了人們的需求,比價複雜的組合圖形出現,用於展示基本數據的統計。不如ggpubr等一些包吧:這些圖形足夠讓我們浮想聯翩,但是實際上表達的含義卻不夠,然而ggpubr將這些圖層都封裝起來了,很漂亮的圖形,但是到目前我還沒發現有一些發散性的應用。這個包有點偽ggplot的意思,同時設置大量的參數,如果開發者得以改進的話就太好了。(下面附著出圖代碼,大家就可以看到這一回事)
ggscatterhist =function(data, x, y, group =NULL, color ="black", fill =NA,
palette =NULL, shape =19, size =2, linetype ="solid",
bins =30, margin.plot =c("density","histogram",
"boxplot"), margin.params =list(), margin.ggtheme =theme_void(),
margin.space =FALSE, main.plot.size =2, margin.plot.size =1,
title =NULL, xlab =NULL, ylab =NULL, legend ="top",
ggtheme =theme_pubr(),...)
library(ggpubr)
# Grouped Scatter plot with marginal density plots
ggscatterhist(
iris, x ="Sepal.Length", y ="Sepal.Width",
color ="Species", size =3, alpha =0.6,
palette =c("#00AFBB","#E7B800","#FC4E07"),
margin.params =list(fill ="Species", color ="black", size =0.2)
)
# Use box plot as marginal plots
ggscatterhist(
iris, x ="Sepal.Length", y ="Sepal.Width",
color ="Species", size =3, alpha =0.6,
palette =c("#00AFBB","#E7B800","#FC4E07"),
margin.plot ="boxplot",
ggtheme =theme_bw()
)
library(ggpubr)
# Data preparation
housetasks <- read.delim(
system.file("demo-data/housetasks.txt",package="ggpubr"),
row.names =1
)
head(housetasks,4)
# Visualization
ggballoonplot(housetasks, fill ="value")+
scale_fill_viridis_c(option ="C")
慢慢的組合圖表就這樣開始了:並不是說之前沒有啊,下面你們會看到基於base的組合圖表,是相當強大的,只是熱度沒有現在這麼高而已。Y叔的ggtree提供了facet_plot函數,用於進化樹同各種圖表的組合,最近的版本還支持了聚類對象,因此,樣本距離和這使得gtree運用起來也就多一些。
前一段時間在微生信生物群中討論過好多優秀的可視化圖表,甚至有些圖表目前無法通過R語言實現。這裡我將這些優秀的圖表展示給大家。也借著這些圖形談一談未來的論文圖表。
這張圖形是明顯的Graphlan繪製的,但是就這上面一個個的柱狀圖是沒有辦法在同一個坐標標度中實現的,所以目前絕對只能組合圖形。基於graphlan繪製的進化樹很漂亮,但是調參數確實是巨大的問題,由於目前還很少有工具可以替代graphlan,所以我們還是經常使用這個工具,目前,R語言中ggtree的設計理念似乎可以解決這個問題,但是兩年前我就問過Y叔了,至今外環繪製只有熱圖。其實可以繪製熱圖,就可以繪製其他元素,例如各種形狀,這樣下來設置比graphlan的外環內容更加豐富,畢竟基於ggplot許多開發者構造了多種圖層元素,足以幹掉graphlan。
最近ggtree的相關工作者有考慮到graphlan,比如microiomeviz包,就提供了將物種分類樹構造成ggtree對象,並且提供類似graphlan輸出的圖形樣式,正在做,但是還不夠,最起碼對於擴增子數據不是很好的兼容,例如:我們使用擴增子注釋數據很容易得到graphlan建樹文件,但是由於對未注釋物種的處理方式不同,所以我們使用microiomeviz包來處理擴增子注釋數據是不容易的。但這是一個很好的開端。
這張圖表出現在2015年的science,目前已經可以通過ggcor包進行實現了。下面這幾張圖形式是早期的樣式,依靠ggplot的出圖,完全兼容,並在昨天(2020年3月12日)完成了對代碼的最終改造。這是組合圖表的的有益嘗試。在2015年,當時並沒有成熟的工具來繪製這個圖表,我們不知道作者是如何繪製的,但是大概率是手動組合,但卻提供了創新的思路,讓我們可以用於開發。
這張圖片的難點是熱圖同相關圖形結合,並且將類似於進化樹的標籤加到圖形中,按照某種規定在熱圖上標記方框,是否可以通過R 語言實現呢,顯然ggplot目前還不行。標記方框可以使用聚類算法,或者指定等來構造,似乎目前ggcor可以做一部分,但是目前還不夠完善。右側物種分類信息本來是很難添加的,但是經過思考和實踐,microbiomeViz結合ggtree可以完成這個物種分類信息的添加,想必會更好看。
堆疊柱狀圖如何展示極高豐度的指標和極低豐度的指標,這篇CHM給出了自己的方案。首先是將柱狀圖按照豐度排布豐度塊,低豐度的將坐標軸拉長展示,而卻還加進去了坐標截斷,ggplot對斷軸支持度不夠,所以實現起來還是有一定難度的。這個方案應該可以通過R語言facet實現,但是ggplot天生對截斷縱坐標圖形支持不夠,這是短板,所以實現以下功能還是有一定難度的。
18年發表與microbiome的擴增子加代謝物組的工作,熱圖實際上從來就沒有熱過,冷豔的表達更加深入人心,這樣的圖形結合左側的分類箱線圖,通過作圖實現還是相當困難,主要是實現多對一排列。這張圖形看上去是組合起來的,相比於上面的圖形,似乎沒有足夠的亮點,但是讓我思考了了一個在熱圖上聚類的方法,其實挺不需要添加圖層來標記,我們將熱圖按照聚類等數據將熱圖分隔開來,只需指定分組即可得到類似的效果。
複雜熱圖,目前ggplot對這種複雜圖形的支持不夠,base下的plot可以實現許多複雜的組合圖形,比如下面的這張:可通過ComplexHeatmap包實現。這是目前使用的人很少罷了。base對於組合圖形的支持很好,base非常強大,例如我們目前很火熱的upset圖形就是使用base出圖的,但是逐漸有了gg版本的upset。
這張圖形結合熱圖和氣泡圖,兩者可以通過連線進行組合。
最近幾年網絡,尤其是漂亮的網絡在高水平SCI上層出不窮,目前經典的可視化方式就是gephi的圓心,並結合計算量很大的layout得到比較好的成圖。cytoscape可以根據不同模塊等分類進行分開展示網絡,這是其特色,R語言對於網絡圖可視化顯得不足,但是確實在發展目前ggraph包開發,sne包,tidyverse等包都可以使用ggplot出圖,這是網絡可視化發展的第一步,很欣喜看到這種變化,但是到達到gephi和cytoscape的效果是要困難不少。
這是15年發表在Mbio上的一篇文章:The Soil Microbiome Influences Grapevine-Associated Microbiota,使用了如圖所示的網絡圖,按照葡萄植株的不同位置,將網絡變形,這樣做是想要突出微生物群落和空間位置之間的關係。
在19年的焦碩的一篇文章中將微生物和地圖整合起來其實和上一張圖是一個道理。那這張圖你會做嗎?
網絡圖同示意圖,無論是植物還是地理地圖等結合展示可以更加清晰的描述微生物在空間的關係,這似乎是趨勢:圖形和圖像慢慢開始結合,視覺震感程度也更強,表達也更加容易。近年來在R語言中出現gganatogram包,可用於ggpplot繪製示意圖,那麼現在示意圖也可以使用ggplot畫,網絡圖也可以使用ggplot話,兩者結合似乎只需一步就好了。這種努力理所當然的。
R語言在組合圖表中佔據的地位也越來越重要,以ggplot為框架進行圖表的組合將會更加深入。
所以在未來論文中,隨著研究的不斷深入,各種自然現象和發現需要更加複雜的圖表進行描述,單個圖表往往不能勝任,組合圖表將成為未來,其次圖像和圖形之間沒有明顯的節點,會更加靈活的運用。