R語言中的色彩和調色板簡述

2021-02-19 R語言統計與繪圖

可視化數據時,色彩往往是最欠考慮的因素。

的確,在一個圖中,數據的選擇和圖表類型的確定才是最重要,最需要確定的因素。但是,適當的選擇顏色不僅僅能使數據圖的閱讀者賞心悅目,而且有助於圖中數據關係的呈現,使得整個圖表更有說服力。

這篇文章將簡單介紹R語言中的色彩和調色板相關package和函數。

一、R語言中的顏色與調色板1. R語言中的顏色

R中可以通過定義col參數自定義顏色。

參數的設置的四種方法是等價的:

數字(如1代表當前palette的第1種顏色,2代表當前palette的第2種顏色等)

這幾種設置方法是等價的,比如下例:

barplot(1:4, 
        col = c(1, "red", rgb(1, 0, 0), "#FF0000"))

人們不禁要問,不同數字代表的都是什麼顏色?

通過palette()函數,可以看到在當前調色板下,第一種顏色是黑色,第二種顏色是紅色。這個調色板共有8種顏色,當使用顏色數大於8時,會從頭開始。

palette()

# [1] "black"   "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710" "gray62" 

調色板當然是可以改變的,比如用系統中的彩虹調色板。

此時第二位可就不是紅色了。

palette(rainbow(12))
barplot(1:4, 
        col = c(2, "red", rgb(1, 0, 0), "#FF0000"))

通過再次將palette設置為"default",可以得到默認調色板。

palette("default")

可以看到,用數字來設置顏色非常簡單,但是可重複性比較差,可能會因為他人調色板設置的不同而導致顏色不一致。一般是在自己進行探索性數據分析時使用得比較多。

直接用顏色的英文來設置,則沒有上述問題。

R中可以用英文設置的顏色有657個,可以通過colors()函數查看,或者直接運行demo("colors")看示例圖。

不過我這等沒有美術基礎的色盲,用得多的還是最簡單的"red"、"green"、"blue"。

head(colors())

# [1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1" "antiquewhite2"
# [6] "antiquewhite3"

RGB函數接入三個取值[0,1]的數字,三個數字分別對應"red"、"green"、"blue"。所以在第一幅圖中,通過將"red"設為最大值1,"green","blue"設為最小值0,得到的結果就是紅色。

rgb()函數中參數alpha是用來設置透明度的,對於特別密集的散點圖很常用。

barplot(1:3, 
        col = c(rgb(1, 0, 0), 
                rgb(0, 1, 0), 
                rgb(0, 0, 1)))

其實rgb()函數返回的值就是十六進位顏色代碼,所以二者肯定可以換著使了。

rgb(1, 0, 0)

# [1] "#FF0000"

2. R語言中的調色板

調色板,簡單來說就是顏色的列表。

其實在上一節中已經出現過一種調色板rainbow了。

傳入數字12,獲得了12個彩虹顏色的顏色列表。傳入數字1000,可以的都下圖右側的彩虹轉盤。

par(mfrow = c(1, 2))
pie(rep(1, 12), 
    col = rainbow(12), 
    main = "rainbow12")
pie(rep(1, times = 1000), 
    labels = "", 
    col = rainbow(1000), 
    border = rainbow(1000), 
    main = "rainbow1000")

R語言中除了自帶rainbow()調色板還有以下幾種:

par(mfrow = c(2, 2))
pie(rep(1, 12), col = heat.colors(12), main = "heat")
pie(rep(1, 12), col = terrain.colors(12), main = "terrain")
pie(rep(1, 12), col = topo.colors(12), main = "topo")
pie(rep(1, 12), col = cm.colors(12), main = "cm")

二、colorRamp()和colorRampPalette()

colorRamp()和colorRampPalette()都可用於建立顏色板。

通過傳入希望的主要顏色如藍、紫,colorRamp()和colorRampPalette都返回一個函數。

二者返回的函數區別為:

colorRamp()返回的函數像grey()一樣,入參為[0,1]之間的數列,數列中數字個數即為函數返回的顏色板色彩數。colorRampPalette()返回的參數則像rainbow()一樣,入參為希望返回顏色板色彩的數量。

而且通過下例可知,colorRampPalette()返回漸變顏色板函數,而colorRamp()返回對比顏色板函數。雖然都是用同樣的顏色,結果不同。

par(mfrow = c(1, 2))
b2p1 <- colorRampPalette(c("blue", "purple"))
b2p2 <- colorRamp(c("blue", "purple"))
pie(rep(1, 12), labels = "", 
    col = b2p1(12), border = b2p1(12), 
    main = "colorRampPalette")
pie(rep(1, 12), labels = "", 
    col = b2p2(seq(0, 1, len = 12)), 
    border = b2p2(seq(0, 1, len = 12)), 
    main = "colorRamp")

三、RColorBrewer包

雖然說RColorBrewer包中實際用到的就只有brewer.pal()函數,但是包中的兩個優點使得其非常實用。

包中顏色板被劃分為序列型(sequential)、離散型(diverging)、分類型(qualitative)這三種基本能滿足統計作圖需要的類型;顏色都比較協調。更多指引見其官網ColorBrewer。
require("RColorBrewer")

序列型顏色板適用於從低到高排序明顯的數據,淺色數字小,深色數字大。

display.brewer.all(type = "seq")

離散型顏色板適合帶「正、負」的,對極值和中間值比較注重的數據。

display.brewer.all(type = "div")

分類型顏色板比較適合區分分類型的數據。

display.brewer.all(type = "qual")

下面兩個圖是不是比默認顏色好看一些?

再不好看的話只能靠自己的藝術細胞,或者從別人的圖片上找靈感了。

比如說上次文章中寫到的從dribble網站上扒下來調色板顏色,可以回憶一下。有更高要求的同學可以參考哈佛的CS171可視化課程,用的是D3。

image(volcano, 
      col = colorRampPalette(brewer.pal(9, "Purples"))(20), 
      main = "volcano")

plot(iris$Petal.Length, iris$Petal.With, 
     col = brewer.pal(3, "Set2")[iris$Species], 
     main = "iris")

本文直接來源自R友舍公眾號,原始來源不詳,如需複製我公號文章,排版請註明我公眾號來源,如不願意請複製原文,謝謝。

相關焦點

  • ColorHunt|一個色卡/色譜、調色板和色彩搭配一體的色彩製作網站
    #色彩搭配#Color Hunt 又稱為顏色獵人,是一個收錄許多配色和色碼卡的收集本。如果不喜歡首頁展示的色卡,可以選擇不同的調色板風格進行切換,切換風格的位置在logo旁邊:除了查看其他用戶的配色建議,也可以自己製作色卡,製作的入口在最右邊的個人信息處:點擊 Create,就可以自己創建色卡,首先進入的是創建色卡的頁面:點擊色塊,就可以展示出顏色選擇器:
  • 從調色板中得出的色彩搭配靈感
    每周都要整理一次顏料盒,再整理配色的過程中,我發現了一些小秘密。我上課的時候,習慣把顏色分為兩大塊:分別用兩個盒子,一個盒子裡面都是純色,另一個裡面都是高級灰。先來普及兩個概念:1.色彩的純度/飽和度2.高級灰先來簡單了解一下色環,左邊就是基本色原色,右邊是降低了飽和度的色環。
  • 大師調色板上的秘密,揭露莫奈作畫習慣,對色彩至關重要
    大師調色板上的秘密,揭露莫奈作畫習慣,對色彩至關重要,值得學。莫奈色彩豐富是什麼原因,跟你想的不一樣。一個人畫得怎麼樣,從他的調色板上就可以看出來,這是老師常說的一句話 。莫奈的油畫色彩美妙絕倫,我們來看看他的調色板,看能不能從中找出一些倪端,他有什麼作畫習慣,幫助我們分析他作畫時的思路,我們從中可否能窺探到一些常人不知的秘密。筆者在實踐中發現,莫奈的畫色彩好看,與他很多作畫習慣有關,具體請看下面分析。
  • 收藏好看的調色板,為下一個設計項目提供顏色創意
    為了設計及生產更好看更優秀的產品,很多設計師一直在尋找好看實用的配色調色板,雖說很多時候需考慮要結合品牌色,其次還要與主題相搭配,但每年在設計圈流行的色彩在不斷變化,如同 UI 設計一樣,有時候流行長投影,有時候流行古典圖標風格,又或者是卡片式布局、無線界面等等。
  • 那些大師調色板告訴我們的事情
    畫筆、顏料、畫布和調色板是一個畫家的必備工具,而他們畫上畫布的每一筆事先都會經過調色板。他們喜歡使用的顏色和調配色彩安排冷暖色系的習慣在這上面一目了然。這些大師調色盤的圖片來自德國攝影師馬蒂亞斯·夏勒(Matthias Schaller),他認為調色盤是畫家藝術創作的抽象景觀,同時也是一個窗口。
  • 這就是大腦中的調色板!
    視網膜上作為光探測器的視錐細胞有三種,分別檢測短波、中波和長波段的可見光,因此我們感知到的顏色空間也是三維的。一維是亮度,它反映了對視錐信號處理的「加和」能力,色調和飽和度是另外兩個維度,由不同視錐信號之間的激活差異產生。
  • 繪畫技巧:彩色調色板入門的4個技巧
    在我犯這些錯誤之前,讓調色板作為參考會好得多 - 或許,也許,只是可能,這些錯誤中的一些本可以避免。但這是個好消息!如果您已經有很多鉛筆,則不必為每種可能的組合製作調色板。這是我的建議:1.從特定主題的調色板開始我喜歡畫風景和動物 - 主要是馬和狗。如果您喜歡我並且有喜歡的主題,請將調色板聚焦在該主題上。
  • rPython:在R語言中調用python命令
    經常使用Python和R語言的人都知道,如果R中有某些功能Python不容易實現時,則可以安裝加載rpy2包,從而實現在python中調用R語言命令的功能
  • rpy2庫 | 在jupyter中調用R語言代碼
    在數據分析中,Python和R各有千秋,雖然Python或R都能在數據分析打通關,從採集、清洗(預處理)、分析、可視化,但是在不同的環節,不同的語言易用程度不同。Python勝在幹髒活累活,諸如數據採集、數據清洗、機器學習等;而R語言勝在統計分析、可視化等。所以,如果你正好Python和R都入門了,可以考慮兩者結合。
  • 科學家發現大腦中的調色板
    目前在靈長類視覺大腦腹側通路中,從初級視皮層(V1),途徑紋外皮層(V2和V4),到顳側皮層(IT)的各個視覺腦區,都發現了編碼色彩的神經元。但是色彩在等級化的不同視覺腦區是如何進行加工處理的,尤其是如何形成心理主觀層面上的顏色認知空間,根本不清楚。
  • 經典電影鏡頭中的調色板告訴你:色彩是如何決定影片氣氛的
    在還沒有任何演員講臺詞之前,色彩往往決定了電影的氛圍和情感基調。2003年的電影《殺死比爾》運用黃色來表現烏瑪·瑟曼瘋狂和不安分的性格。而科幻片中則經常會用到藍色、灰色和綠色漸變。如今,好萊塢越來越多選用青色和橙色,尤其是在動漫和連環畫改編的電影裡。
  • 設計師必備的快速選擇調色板指南
    我們負責從線框和用戶流到排版和顏色選擇的所有事情。通過精心設置和提示,您可以從選擇字體、選擇顏色和配色方案中完成大部分工作。下面分享一些方法,這些方法應該能夠提高你的設計水平,使你更容易地選擇一個美觀且易於理解的調色板。
  • R語言的一些配色的R包
    超多朋友諮詢R語言可視化的配色問題,我也簡單整理了一下,希望對大家有幫助!
  • 大自然的調色板——歐泊
    有這樣一種寶石,它沒有鑽石的鋒芒畢露與犀利,也沒有紅寶石、藍寶石、祖母綠顏色純正單一,比和田玉、翡翠更加絢爛多彩,但是同一粒這種寶石中卻可以同時擁有各種彩色寶石中最頂尖的顏色,它那奇特變換的色彩有如星漢燦爛的宇宙;又像縹緲神奇的極光;也像是畫家手中繽紛的調色板;
  • R語言對接高級語言Fortran
    (1)Fortran是當之無愧的性能之王,在本文的測試中可以看到Fortran代碼的效率是Rcpp的2倍、Julia的4倍、python的30倍、R語言的90倍。在for循環密集的代碼中,Fortran可以輕鬆達到R語言的200倍;(2)很多古老的、但專業上通用的模型採用Fortran語言編寫,翻譯成其他語言,人力所不能及。為何對接到R語言?
  • R | 基礎繪圖
    由於R語言基礎作圖部分內容簡單直接,但參數繁多,因此這裡不做系統介紹,只挑出幾個點來講一講。主要介紹R中的顏色系統。函數的使用格式是這樣的png("1.png",width=600,height=600) # 指明接下來要做的圖形的格式和長寬plot(x,y)dev.off() # 關閉圖形設備這樣做完圖,不會顯示在R語言窗口中,而是當前文件夾中會出現一個 1.png 圖片。
  • 地理數據科學培訓班第一課之初識R語言
    歡迎收看明晚九點的直播講解:R 和 RStudio 的安裝及 R Profile 的配置 & 初識 R 語言數據爬取本次直播講解將使用 Windows 系統的電腦演示。首先打開 RStudio Desktop:# 運行usethis::edit_r_environ()# 在打開的 .Renviron 文件中輸入下面的代碼(注意不需要運行):PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"
  • 乾貨:UI設計中使用色彩的10條基本原則
    色彩術語 色彩術語構成了我們色彩知識的基礎。把色彩術語,如色相,色調和陰影,看作是我們可以用來開發獨特調色板的工具。 Hue(色相) 色相是色彩的一個技術術語。色相是指母色--沒有添加白色或黑色的飽和色。
  • 生機勃勃喜慶顏色,那個吉祥紅色綠色和黃色調色板
    紅色被認為是一種象徵激情、熱情和激情的色調-紅色與印度婚禮密切相關-它被用作或與奶油/白色(在孟加拉和古吉拉特社區很流行)、綠色(在拉賈斯坦邦和古吉拉特邦的Gharchola Sree)和其他明亮的顏色搭配使用。紅色的整個調色板-包括粉色、品紅、紅酒、朱紅(印度教徒婚姻的象徵)-包括桃子、橘子和橙色-被認為適合於節日和婚禮。
  • R語言熱力圖綜合教程-heatmap、d3heatmap和ComplexHeatmap
    R包和功能很多,包括:heatmap()[R基本函數,統計數據包]:繪製一個簡單的熱圖heatmap.2()[ gplots R包]:與R base函數相比,繪製了增強的熱圖。接下來,我們將重點介紹ComplexHeatmap程序包,該程序包提供了一種靈活的解決方案來安排和注釋多個熱圖。它也可以可視化來自不同來源的不同數據之間的關聯我們使用mtcars數據作為演示數據集。