R語言:如何快速生成許多差異明顯的顏色?

2021-02-19 宏基因組

這個需求真的太常見了!注意問題強調的幾個關鍵詞:一是快速,二是大量,三是差異明顯。在生成大量元素比較圖時要明顯區分不同樣本,比如宏基因組中的物種分析:

方法一:自定義

自定義顏色:優點是選擇差異明顯的顏色,缺點是費時費力,不知選多少種,眼睛都要挑花。
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包

利用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))


方法二得到的圖:

方法三:randomcoloR

綜合來說,這種方法是最合適的吧,也最省代碼。但顏色太多的話,必定是有很多近似的。而且這種方法不能重複得到結果,因為是隨機生成的嘛,即使設置種子也不行。

library(randomcoloR)
palette <- randomColor(count = 60) #隨機生成60種顏色,其實裡面有重複的
palette <- distinctColorPalette(60) #差異明顯的60種

這個問題貌似很難完美解決,畢竟主要的顏色也就那麼幾種。以下是第三種方法得到的圖:

方法四:ggsci組合圖

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擴增子、宏基因組科研思路和分析實戰,關注「宏基因組」

點擊閱讀原文,跳轉最新文章目錄閱讀

相關焦點

  • RStudio|用R Markdown生成你的R語言數據分析報告
    作者:魯偉一個數據科學踐行者的學習日記。
  • R語言mRNA差異表達分析
    上一篇文章介紹的是mRNA數據的整理,整理完就開始介紹的是如何用R語言來做差異表達分析,繼續碼字。
  • R語言用數學生成美麗的圖案
    有許多可以用數學術語描述的自然事實的例子。很好的例子是雪花的形狀,羅馬花椰菜的分形幾何形狀或自相似性如何決定植物的生長。R是進行認真分析的工具,但並非生活中的每一件事都是認真的。生活也很有趣,R可以用來玩樂和做美麗的事情。它的圖形功能可用於生成藝術圖像,例如本文生成的圖像,該圖像的靈感來自植物如何布置其葉子。這個事實稱為葉序。
  • 使用R語言進行分詞並生成詞雲
    1 R語言分詞的基本操作在使用R語言進行分詞操作時,常使用的包為jiebaR包,一般會選取其中的worker()分詞器,該分詞器中有多個參數,通過設定可以改變分詞的方式,詞典的使用及輸出方式等,如果均不設定也可按照參數默認值直接使用。
  • R語言做深度學習
    1 如何用R語言做深度學習?閱讀本文,你可以獲得:R語言做深度學習工作環境創建R語言快速實現神經網絡模型R語言做深度學習的資料深度學習的應用場景感謝RStudio公司開發的keras包,使得R語言可以利用keras深度學習框架來做深度學習,具有簡潔,易學,好用等特性。什麼是Keras?
  • 教程 | 如何快速訓練免費的文本生成神經網絡
    Google Colaboratory 在 GPU 上快速訓練文本生成神經網絡,包括兩種類型的文本生成模型:字符級別和單詞級別的文本生成網絡。許多文本生成神經網絡的網上教程只是簡單複製了一個現有的 char-rnn 實現同時對輸入數據集進行了更改。這確實是一種方法,但是研究者仍然有機會通過現代深度學習工具去改進它。
  • 超級乾貨 :手把手教你學習R語言(附資源連結)
    本文為帶大家了解R語言以及分段式的步驟教程!人們學習R語言時普遍存在缺乏系統學習方法的問題。學習者不知道從哪開始,如何進行,選擇什麼學習資源。雖然網絡上有許多不錯的免費學習資源,然而它們多過了頭,反而會讓人挑花了眼。為了構建R語言學習方法,我們在Vidhya和DataCamp中選一組綜合資源,幫您從頭學習R語言。
  • 獨家 | 手把手教你學習R語言(附資源連結)
    本文為帶大家了解R語言以及分段式的步驟教程!人們學習R語言時普遍存在缺乏系統學習方法的問題。學習者不知道從哪開始,如何進行,選擇什麼學習資源。雖然網絡上有許多不錯的免費學習資源,然而它們多過了頭,反而會讓人挑花了眼。為了構建R語言學習方法,我們在Vidhya和DataCamp中選一組綜合資源,幫您從頭學習R語言。
  • 快速入門 | 學習 R 語言
    語言中最基本的數據類型是向量<- 是 R 語言的標準賦值運算符使用 c 創建向量,c 表示連接 (concatenate)x <- c(1, 2, 4)x[1] 1 2 4c 中也可以使用向量,注意這種方式是將向量展開,而不是生成嵌套的向量q <- c(x, x,
  • 基於Python腳本的R語言的函數
    毫無疑問,這兩種語言在最近幾年都取得了巨大的進展,成為數據科學、預測分析和機器學習的首選程式語言。事實上,在IEEE新近的一篇文章中,Python取代C++成為2018年的頂級程式語言,R已經牢牢地保住了它在前10名中的位置。 然而,這兩種程式語言之間存在著一些本質的差異。R主要是為數據分析問題的統計分析和快速原型化而開發的工具。
  • R語言繪製條形圖
    繪製堆砌和分組條形圖創建數據集set.seed(112)data <- matrix(sample(1:30,15) , nrow=3)colnames(data) <- c(「A」,」B」,」C」,」D」,」E」)rownames(data) <- c(「var1」,」var2
  • 中了數據可視化的毒:BBC如何使用R語言繪製數據圖表?
    我們將在這篇文章中介紹我們如何以及為何要使用 R 語言的 ggplot2 軟體包來創建可直接使用的圖表,我們也會給出我們的流程和代碼以及分享我們一路上所學到的東西。BBC 視覺與數據新聞團隊的數據記者已經使用 R 來執行複雜和可重複的數據分析以及構建原型一些時日了。
  • 「了不起的R語言」第一課:R與Rstudio的安裝
    是時候為你打開新世界的大門,讓你多了解些了不起的R語言吧!那麼R語言哪裡好?免費,免費,大寫的免費!正版!開源!上手快!特好使!工欲善其事必先利其器,我們今天就來給大夥介紹R語言以及Rstudio如何安裝。一、R的安裝R 的安裝可通過網址https://cran.rstudio.com/選擇適合自己平臺的安裝包進行下載.
  • R語言 | 差異顯著性檢驗
    我們經常要比較兩組或多組數據是否具有顯著差異,同時我們還會用差異顯著性檢驗識別不同組樣品中具有顯著差異的變量。這篇推文會分別介紹經常使用的差異顯著性檢驗方法在R語言中的實現。方法選擇差異顯著性檢驗具有多種方法,分別針對不同的情況,我們要根據自身情況選擇合適的方法進行分析。
  • Day7:R語言課程 (R語言進行數據可視化)
    使用R base包提供的函數'mean()':mean(rpkm_ordered[,"sample1"])只想要其中一個樣本(數據框中的1列)的平均值,可以這樣實現,但要從所有12個樣本中獲取此信息該如何實現?程式語言通常有辦法允許多次執行代碼,或者在「循環」中執行。
  • R語言學習筆記之相關性矩陣分析及其可視化
    library(Hmisc)#加載包res2 <- rcorr(as.matrix(mydata))res2#可以用res2$r、res2$P來提取相關係數以及顯著性p-valueres2$r如何將相關係數以及顯著性水平p-value整合進一個矩陣內,可以自定義一個函數flattenCorrMatrix。
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    在課題或者項目中,你往往會遇到這樣的問題:參與本次實驗的病人的年齡的分布如何(均值、、標準差、中位數等)?實驗中不同組病人的生存時間有沒有差異?病人性別對實驗結果有無影響?接下來的幾次教程內容就是為了解決這些問題,我們會逐步學習R語言中的一些統計方法,希望大家在學習新內容的同事,也可以回顧一下自己之前學過的統計學課程。
  • 自然語言生成的演變史
    語言模型可以在字符級別,短語級別,句子級別甚至段落級別構建。 例如,為了預測「我需要學習如何___」之後出現的下一個單詞,模型為下一個可能的單詞分配概率,這些單詞可以是「寫作」,「開車」等。神經網絡的最新進展如RNN和LSTM允許處理長句,顯著提高語言模型的準確性。 馬爾可夫鏈 馬爾可夫鏈是最早用於語言生成的算法之一。
  • R 語言入門學習路線與資源匯總
    剛開始學習R語言,可以看一些免費入門視頻,可以在B站上面搜,B站有很多免費的R語言入門視頻,比如《尚學堂尹鴻的R語言速成實戰》[1],這個視頻是免費的,視頻講義素材來源於《R語言實戰》的第一章到第六章,這幾章可以邊看書邊跟著視頻學習,用來簡單入門基本夠了。
  • 編程模板-R語言腳本寫作:最簡單的統計與繪圖,包安裝、命令行參數解析、文件讀取、表格和矢量圖輸出
    個人認為:是否能熟悉使用Shell(項目流程搭建)+R(數據統計與可視化)+Perl/Python等(膠水語言,數據格式轉換,軟體間銜接)三門語言是一位合格生物信息工程師的標準。之前分享過我個人的《Shell語言》和《Perl語言》腳本寫作模板(藍色字為連結直達),今天再分享一下我的R語言模板,一次性解決困擾新手的眾多問題,如包安裝、命令行參數解析、文件讀取、