送书|science-组合图表绘制
wentao
2020/11/27
寫在前面
有些事情做了很痛苦,但是不做更難受。比如今天談到的這件事情,我花了一天加一個晚上時間才寫了一個這個功能:science組合圖表的實現。這部分一共寫了三個函數,一個門特爾檢驗,一個ggplot版本的相關熱圖繪制,還有連線圖形繪制。為什么我花費了這么多時間呢?一方面這個功能的實現要想做的靈活點,就必須有一個ggplot版本的相關熱圖輪子,公開的輪子不好用,所以我自己造了一個,功能很基礎哈,只是一個雛形,但是可以作為后面組合圖表的輪子。這幾個獨立的函數也很有用,但是不細化了。
早在之前我們就推送過science組合圖表的推文了,我們做的也是比較早的,ggplot版本的,例如;
終于你也可以做這張圖了;
science 級別的組合圖表函數升級了;
science組合圖表第二次重大升級了;
最終版本Science級組合圖表繪制;
Science這張驚艷圖表終于完成了:最終穩定版本;
最后最好用的出現了,雖然在分析微生物數據上還有點小瑕疵,但是已經非常舒服了,但是這個包已經被作者刪除,厚哥表示不會在公開這個包。半年來大家的需求似乎不斷,本來從第四個版本以來我放棄了這個圖形的開發,因為開發的沒有厚哥的好,所以就擱置了一年,到如今,我只能撿起來繼續做一些工作,盡量讓這個功能好用點。還有就是任何問題的解決方案都不應該只有一個,太容易就斷掉了,所以增加一種問題的解決方法,雖然不一定是最好的,也是有必要的。我也沒有參考厚哥之前的代碼,自己實現,達到一個功能也是挺有意思的,就是浪費了好多時間,代碼也不夠成熟,慢慢提升吧,實用性后再優化。
MatCorPlot函數參數解釋
env.dat = env1 其他指標表格,參見要求
tabOTU = tabOTU1 otu表格,list文件,最多三個。
distance = “bray”群落距離計算方法,這里就兩種 bray和jcd。
method = “metal” 門特爾檢驗方法, 這里兩種,另外一種是偏門特爾檢驗。
x = F 是否設置x軸標簽。
y = F 是否設置y軸標簽
diag = T 是否設置對角線標簽。
sig = TRUE 是否僅僅展示顯著的色塊
siglabel = FALSE 顯著色標是否標記星號
shownum = TRUE 是否展示相關值
numpoint = NULL 色塊point類型,默認22號方塊,直接使用pch編號即可更換。注意必須更換具有fill屬性的編號。
numsymbol = 27 這是symbol,擴展了ggplot中point類型,如果要使用,則需要另外安裝R包ggsymbol。需要github安裝
numpoint2 這部分只可以使用ggplot中的pch點形狀,默認21號點,控制link部分點形狀。
lacx = “left” 相關熱圖展示方向,x軸,可選“right”
lacy = “bottom” 相關熱圖展示方向,y軸,可選“top”
range = 0.5 連線整體粗細變化,值越大變化越大。
p.thur = 0.3 顯著性閾值
onlysig = F 是否只展示顯著性的連線。
實戰
注意這個功能為2020年11月29號加入,之前安裝的沒有這個功能。
devtools::?install_github("taowenmicro/ggClusterNet")需要R包和數據(內置)
library(phyloseq) library(ggClusterNet) library(tidyverse) data(ps) ps1 = filter_taxa(ps, function(x) sum(x ) > 200 , TRUE);ps1## phyloseq-class experiment-level object ## otu_table() OTU Table: [ 442 taxa and 18 samples ] ## sample_data() Sample Data: [ 18 samples by 10 sample variables ] ## tax_table() Taxonomy Table: [ 442 taxa by 7 taxonomic ranks ] ## phy_tree() Phylogenetic Tree: [ 442 tips and 441 internal nodes ]otu = as.data.frame(t(vegan_otu(ps1))) mapping = as.data.frame( sample_data(ps1)) data(env1)關于微生物組數據的要求:要求很簡單,將otu表格作為list對象即可,就像下這樣,多個optu表格自然都添加進去list對象即可。
其他指標數據要求:一張數據框,行名是樣本,列名字是指標。
tabOTU1 = list(otu1 = otu) data(env1)默認參數會會給出一套解決方案,當然可以換
# ?MatCorPlot p0 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1) p0numpoint2改變link部分點形,并標記顯著性,去除不顯著的元素,標記顯著的R值。
p1 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1,numpoint2 = 22,sig = F,lacx = "right", # 改變位置xlacy = "bottom",# 改變位置yonlysig = F # 是否只顯示顯著的link線)p1curvature 修改link的彎曲程度。越小線越直。去除數字,標記為星號,其次換point形狀為新形勢
p2 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1,siglabel = T, # 使用星號標記顯著的關系shownum = F, # 不顯示數字numpoint = NULL,# 不使用ggplot嗎,默認點numpoint2 = 13,#link使用的point為pch = 13numsymbol = 27,# 使用擴展點。curvature = 0,lacx = "right",lacy = "bottom",p.thur = 0.3,sig = F,onlysig = F ) p2我們更換圖形角度和去除不顯著的連線,這里不顯著設置為0.3,保證去除一部分線,模擬數據測試用,不作為參考值。
p4 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1,distance = "bray",method = "metal",x = F,y = F,diag = T,sig = TRUE,siglabel = FALSE,shownum = TRUE,numpoint = 22,numsymbol = NULL,lacx = "left",lacy = "bottom",range = 1,p.thur = 0.3,onlysig = T) p4即使是兩個群落
tabOTU1 = list(otu1 = otu,otu2 = otu) data(env1) p5 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1,distance = "bray",method = "metal",x = F,y = F,diag = T,sig = TRUE,siglabel = FALSE,shownum = TRUE,numpoint = NULL,numsymbol = 27,lacx = "right",lacy = "bottom",range = 0.5,p.thur = 0.3,onlysig = F) p5最多三個群落(細菌,真菌,古菌)
我就設置了三個群落,如果后面有需要,可以設置成為無限個,但是也沒有意義。后面如果有時間,我會升級成6個群落,這就差不多了,不然也太亂了。
tabOTU1 = list(otu1 = otu,otu2 = otu,otu3 = otu) p6 <- MatCorPlot(env.dat = env1,tabOTU = tabOTU1,distance = "bray",method = "metal",x = F,y = F,diag = T,sig = TRUE,siglabel = FALSE,shownum = TRUE,numpoint = NULL,numsymbol = 27,lacx = "left",lacy = "bottom",range = 0.5,p.thur = 0.3,onlysig = F)p6library(patchwork)(p0 | p1 | p2) / (p4 | p5 | p6)對于顏色和填充的改變
library(RColorBrewer)#調色板調用包
m=brewer.pal(9,"YlGn")
library(scales)
m=c("#E41A1C" ,"#377EB8")
show_col(m)p + scale_colour_manual(values=c("red","blue"))p + scale_colour_manual(values = m) + scale_fill_continuous()# p + scale_colour_manual(values = m) + scale_fill_distiller(palette="RdYlBu")p + scale_colour_manual(values = m) + scale_fill_distiller(palette="PRGn")p + scale_colour_manual(values = m) + scale_fill_distiller(palette="BrBG")(p0 | p7 | p8) / (p0 | p9 | p10)根際互作生物學研究室 簡介
根際互作生物學研究室是沈其榮教授土壤微生物與有機肥團隊下的一個關注于根際互作的研究小組。本小組由袁軍副教授帶領,主要關注:1.植物和微生物互作在抗病過程中的作用;2 環境微生物大數據整合研究;3 環境代謝組及其與微生物過程研究體系開發和應用。團隊在過去三年中在 isme J, Microbiome, PCE,SBB,Horticulture Research等期刊上發表了多篇文章。歡迎關注 微生信生物 公眾號對本研究小組進行了解。
上次送書中獎名單
在11月12日留言送書活動中,挑選留言最認真讀者,歡迎大家對我們的網站提出建議
一站式Venn圖繪制,希望大家多多閱讀,多多轉發,留言多多,收獲多多,文章多多,獎品多多。
送書
本期的留言主題是:在使用R繪圖時遇到的坑或者困難是什么?歡迎轉發朋友圈并留言評論。
留言得贊最高者以及幾位幸運讀者獲得下面由北京大學出版社贊助的書籍(聯系小編時請附上轉發朋友圈截圖),結果在下一期送書活動中公布:
1. 理論為輔、實踐為主。本書涉及一些必要的理論知識,特別是在數據分析部分,但總體以實踐為主,因此幾乎每節都有大量的代碼,方便讀者實踐。
2. 知識全面、系統。本書在介紹了R語言的基礎知識后,從數據獲取和導出、數據清理和操作、數據分析和可視化方面分別進行了探討,內容由淺入深、循序漸進。
3. 案例廣泛。本書中的案例涉及心理學、社會學、醫學、商業和經濟等領域,但并不需要讀者具備這些領域的專業知識。
4. “新手問答”和“小試牛刀”知識模塊?!靶率謫柎稹敝饕獙ψx者學習過程中易出現的疑問或容易犯的錯誤進行針對性的解答;“小試牛刀”結合每章知識及相關技能,列舉綜合上機案例,讓讀者在學完一章內容后能及時回顧和練習,旨在讓讀者鞏固知識、學以致用。
往期精品(點擊圖片直達文字對應教程)
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
?
(請備注姓名-學校/企業-職務等)
總結
以上是生活随笔為你收集整理的送书|science-组合图表绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好奇心、求知欲、理解力一直是我生命里最强
- 下一篇: 原来Rproj还可以这么使用