這個需求真的太常見了!注意問題強調的幾個關鍵詞:一是快速,二是大量,三是差異明顯。在生成大量元素比較圖時要明顯區分不同樣本,比如宏基因組中的物種分析:
自定義顏色:優點是選擇差異明顯的顏色,缺點是費時費力,不知選多少種,眼睛都要挑花。
R的顏色板很多網站都可以查,隨意搜一個貼上:https://www.sojson.com/rgb.html
cb_palette <- c("#ed1299", "#09f9f5", "#246b93", "#cc8e12", "#d561dd", "#c93f00", "#ddd53e",
"#4aef7b", "#e86502", "#9ed84e", "#39ba30", "#6ad157", "#8249aa", "#99db27", "#e07233", "#ff523f",
"#ce2523", "#f7aa5d", "#cebb10", "#03827f", "#931635", "#373bbf", "#a1ce4c", "#ef3bb6", "#d66551",
"#1a918f", "#ff66fc", "#2927c4", "#7149af" ,"#57e559" ,"#8e3af4" ,"#f9a270" ,"#22547f", "#db5e92",
"#edd05e", "#6f25e8", "#0dbc21", "#280f7a", "#6373ed", "#5b910f" ,"#7b34c1" ,"#0cf29a" ,"#d80fc1",
"#dd27ce", "#07a301", "#167275", "#391c82", "#2baeb5","#925bea", "#63ff4f")
利用RColorBrewer包中的面板。
library(RColorBrewer)
display.brewer.all()
查看顏色面板有:
從中選擇顏色區分差異大的面板,也是需要自己挑選,而且數目相對較少:
brewer.pal(9, "Set1") #只有9個
c(brewer.pal(9, "Set1") ,brewer.pal(9, "Set3") ) #也可結合,但顏色區分不大,數目也還是少
colorRampPalette(c("red", "green"))(5)
rainbow(60) #彩虹色很容易生成,但數目一多很難區分,因為是漸變的。
可以結合這些面板,稍微處理下篩選:
library(RColorBrewer)
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',]
#處理後有73種差異還比較明顯的顏色,基本夠用
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals)))
#看下中間60種顏色的效果
pie(rep(1,n), col=sample(col_vector, 60))
方法二得到的圖:
綜合來說,這種方法是最合適的吧,也最省代碼。但顏色太多的話,必定是有很多近似的。而且這種方法不能重複得到結果,因為是隨機生成的嘛,即使設置種子也不行。
library(randomcoloR)
palette <- randomColor(count = 60) #隨機生成60種顏色,其實裡面有重複的
palette <- distinctColorPalette(60) #差異明顯的60種
這個問題貌似很難完美解決,畢竟主要的顏色也就那麼幾種。以下是第三種方法得到的圖:
library(ggsci)
colpalettes<-unique(c(pal_npg("nrc")(10),pal_aaas("default")(10),pal_nejm("default")(8),pal_lancet("lanonc")(9),
pal_jama("default")(7),pal_jco("default")(10),pal_ucscgb("default")(26),pal_d3("category10")(10),
pal_locuszoom("default")(7),pal_igv("default")(51),
pal_uchicago("default")(9),pal_startrek("uniform")(7),
pal_tron("legacy")(7),pal_futurama("planetexpress")(12),pal_rickandmorty("schwifty")(12),
pal_simpsons("springfield")(16),pal_gsea("default")(12)))
pie(1:219,col = colpalettes)
Ref: https://stackoverflow.com/questions/15282580/how-to-generate-a-number-of-most-distinctive-colors-in-r
猜你喜歡10000+:菌群分析 寶寶與貓狗 梅毒狂想曲 提DNA發Nature Cell專刊 腸道指揮大腦
系列教程:微生物組入門 Biostar 微生物組 宏基因組
專業技能:學術圖表 高分文章 生信寶典 不可或缺的人
一文讀懂:宏基因組 寄生蟲益處 進化樹
必備技能:提問 搜索 Endnote
文獻閱讀 熱心腸 SemanticScholar Geenmedical
擴增子分析:圖表解讀 分析流程 統計繪圖
16S功能預測 PICRUSt FAPROTAX Bugbase Tax4Fun
在線工具:16S預測培養基 生信繪圖
科研經驗:雲筆記 雲協作 公眾號
編程模板: Shell R Perl
生物科普: 腸道細菌 人體上的生命 生命大躍進 細胞暗戰 人體奧秘
寫在後面為鼓勵讀者交流、快速解決科研困難,我們建立了「宏基因組」專業討論群,目前己有國內外5000+ 一線科研人員加入。參與討論,獲得專業解答,歡迎分享此文至朋友圈,並掃碼加主編好友帶你入群,務必備註「姓名-單位-研究方向-職稱/年級」。PI請明示身份,另有海內外微生物相關PI群供大佬合作交流。技術問題尋求幫助,首先閱讀《如何優雅的提問》學習解決問題思路,仍未解決群內討論,問題不私聊,幫助同行。
學習16S擴增子、宏基因組科研思路和分析實戰,關注「宏基因組」
點擊閱讀原文,跳轉最新文章目錄閱讀