R 數據可視化 —— ggsci 配色

前言

在繪圖時,如何搭配顏色,是一個很讓人頭疼的問題。今天要介紹的包 ggsci 能大大減輕我們的負擔。

ggsci 提供了很多高質量的顏色搭配,其靈感來自于各種 SCI 雜志的配色,其提供的配色函數也是以對應的雜志或數據庫名稱來命名的

所有顏色標度函數的形式為:

  • scale_color/colour_palname()
  • scale_fill_palname()

其中 palname 表示對應顏色板的名稱,此外,還有對應的畫板顏色生成函數

  • pal_palname()

離散型配色

安裝導入

install.packages("ggsci")
library(ggsci)

我們使用下面的兩張圖,分別為其設置不同的顏色標度,來展示不同標度函數的效果

library(tidyverse)
library(cowplot)

p1 <- filter(diamonds, carat >= 2.2) %>%
  ggplot(aes(table, price, colour = cut)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) +
  theme_bw()

p2 <- filter(diamonds, carat > 2.2 & depth > 55 & depth < 70) %>%
  ggplot(aes(x = depth, fill = cut)) +
  geom_histogram(colour = "black", binwidth = 1, position = "dodge") +
  theme_bw()

plot_grid(p1, p2, ncol = 2)

1. NPG

該配色對應于 Nature Publishing Group 雜志中的配色,使用方式為

p1_npg <- p1 + scale_color_npg()
p2_npg <- p2 + scale_fill_npg()
plot_grid(p1_npg, p2_npg, ncol = 2)

該畫板生成函數為 pal_npg,最多可生成 10 種顏色

> library("scales")
> pal_npg("nrc")(10)
 [1] "#E64B35FF" "#4DBBD5FF" "#00A087FF" "#3C5488FF" "#F39B7FFF" "#8491B4FF"
 [7] "#91D1C2FF" "#DC0000FF" "#7E6148FF" "#B09C85FF"
> show_col(pal_npg("nrc")(10))

添加透明度

show_col(pal_npg("nrc", alpha = 0.6)(9))

2. AAAS

該配色對應于 American Association for the Advancement of Science 雜志,例如

p1_aaas <- p1 + scale_color_aaas()
p2_aaas <- p2 + scale_fill_aaas()
plot_grid(p1_aaas, p2_aaas, ncol = 2)

最多支持 10 種顏色

show_col(pal_aaas("default", alpha = 0.6)(10))

3. NEJM

該配色對應于 New England Journal of Medicine 雜志

p1_nejm <- p1 + scale_color_nejm()
p2_nejm <- p2 + scale_fill_nejm()
plot_grid(p1_nejm, p2_nejm, ncol = 2)

最多包含 8 種顏色

show_col(pal_nejm("default", alpha = 0.6)(8))

4. Lancet

柳葉刀雜志

p1_lancet <- p1 + scale_color_lancet()
p2_lancet <- p2 + scale_fill_lancet()
plot_grid(p1_lancet, p2_lancet, ncol = 2)

最多包含 9 種顏色

show_col(pal_lancet(palette = c("lanonc"), alpha = 0.6)(9))

5. JAMA

對應于 The Journal of the American Medical Association 雜志

p1_jama <- p1 + scale_color_jama()
p2_jama <- p2 + scale_fill_jama()
plot_grid(p1_jama, p2_jama, ncol = 2)

最多包含 7 種顏色

show_col(pal_jama("default", alpha = 0.6)(7))

6. JCO

Journal of Clinical Oncology 雜志

p1_jco <- p1 + scale_color_jco()
p2_jco <- p2 + scale_fill_jco()
plot_grid(p1_jco, p2_jco, ncol = 2)

最多包含 10 種顏色

show_col(pal_jco("default", alpha = 0.6)(9))

7. UCSCGB

UCSC 數據庫

p1_ucscgb <- p1 + scale_color_ucscgb()
p2_ucscgb <- p2 + scale_fill_ucscgb()
plot_grid(p1_ucscgb, p2_ucscgb, ncol = 2)

最多包含 26 種顏色

show_col(pal_ucscgb("default", alpha = 0.6)(26))

8. D3

使用 JavaScript 繪圖庫 D3.js 的配色

p1_d3 <- p1 + scale_color_d3()
p2_d3 <- p2 + scale_fill_d3()
plot_grid(p1_d3, p2_d3, ncol = 2)

支持 4 種調色板類型:

  • "category10" 包含 10 種顏色
  • "category20" 包含 20 種顏色
  • "category20b" 包含 20 種顏色
  • "category20c" 包含 20 種顏色

例如

show_col(pal_d3("category20")(20))
show_col(pal_d3("category10")(10))

9. LocusZoom

LocusZoom 配色

p1_locuszoom <- p1 + scale_color_locuszoom()
p2_locuszoom <- p2 + scale_fill_locuszoom()
plot_grid(p1_locuszoom, p2_locuszoom, ncol = 2)

最多支持 7 種顏色

show_col(pal_locuszoom("default", alpha = 0.6)(7))

10. IGV

IGV 中的配色

p1_igv_default <- p1 + scale_color_igv()
p2_igv_default <- p2 + scale_fill_igv()
plot_grid(p1_igv_default, p2_igv_default, ncol = 2)

支持 2 種調色板類型:

  • "default" 包含 51 種顏色
  • "alternating" 包含 2 種顏色

例如

show_col(pal_igv("default")(51))
show_col(pal_igv("alternating", alpha = 0.5)(2))

11. UChicago

基于 University of Chicago 的配色

p1_uchicago <- p1 + scale_color_uchicago()
p2_uchicago <- p2 + scale_fill_uchicago()
plot_grid(p1_uchicago, p2_uchicago, ncol = 2)

包含 3 種調色板:

  • "default" 包含 9 種顏色
  • "light" 包含 9 種顏色
  • "dark" 包含 9 種顏色

例如

show_col(pal_uchicago("default", alpha = 0.6)(9))
show_col(pal_uchicago("light", alpha = 0.6)(9))
show_col(pal_uchicago("dark", alpha = 0.6)(9))

12. Star Trek

Star Trek 配色方案

p1_startrek <- p1 + scale_color_startrek()
p2_startrek <- p2 + scale_fill_startrek()
plot_grid(p1_startrek, p2_startrek, ncol = 2)

最多支持 7 種顏色

show_col(pal_startrek("uniform", alpha = 0.6)(7))

13. Tron Legacy

Tron Legacy 配色

p1_tron <- p1 + theme_dark() + theme(
  panel.background = element_rect(fill = "#2D2D2D"),
  legend.key = element_rect(fill = "#2D2D2D")
) +
  scale_color_tron()
p2_tron <- p2 + theme_dark() + theme(
  panel.background = element_rect(fill = "#2D2D2D")
) +
  scale_fill_tron()
plot_grid(p1_tron, p2_tron, ncol = 2)

最多支持 7 種顏色

show_col(pal_tron("legacy", alpha = 0.6)(7))

14. Futurama

Futurama 配色

p1_futurama <- p1 + scale_color_futurama()
p2_futurama <- p2 + scale_fill_futurama()
plot_grid(p1_futurama, p2_futurama, ncol = 2)

最多支持 12 種顏色

show_col(pal_futurama("planetexpress", alpha = 0.6)(12))

15. Rick and Morty

Rick and Morty 配色

p1_rickandmorty <- p1 + scale_color_rickandmorty()
p2_rickandmorty <- p2 + scale_fill_rickandmorty()
plot_grid(p1_rickandmorty, p2_rickandmorty, ncol = 2)

最多支持 12 種顏色

show_col(pal_rickandmorty("schwifty", alpha = 0.6)(12))

16. The Simpsons

The Simpsons 配色

p1_simpsons <- p1 + scale_color_simpsons()
p2_simpsons <- p2 + scale_fill_simpsons()
plot_grid(p1_simpsons, p2_simpsons, ncol = 2)

最多支持 16 種顏色

show_col(pal_simpsons("springfield", alpha = 0.6)(16))

連續型配色

對于連續型配色方案,我們使用相關系數矩陣來進行說明。例如

mat <- as.data.frame(round(cor(mtcars), 2))
mat$var1 <- rownames(mat)

p3 <- gather(mat, key = "var2", value = "corr", -var1) %>%
  ggplot(aes(x = var1, y = var2, fill = corr)) +
  geom_tile(colour = "black", size = 0.3) +
  theme_bw() +
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank()
  )
p3

1. GSEA

GSEA 配色

p3_gsea <- p3 + scale_fill_gsea()
p3_gsea_inv <- p3 + scale_fill_gsea(reverse = TRUE)
plot_grid(p3_gsea, p3_gsea_inv, ncol = 2)

顏色生成函數為

pal_gsea(palette = c("default"), n = 12, alpha = 1, reverse = FALSE)

例如

show_col(pal_gsea("default", n = 30, alpha = 0.6, reverse = TRUE)(16))

2. Material Design

Material Design 支持 19 種顏色配色

p4 <- ggplot(data, aes(x = var1, y = var2, fill = corr)) +
  geom_tile(colour = "black", size = 0.3) +
  theme_bw() + theme(
    legend.position = "none", plot.background = element_blank(),
    axis.line = element_blank(), axis.ticks = element_blank(),
    axis.text.x = element_blank(), axis.text.y = element_blank(),
    axis.title.x = element_blank(), axis.title.y = element_blank(),
    panel.background = element_blank(), panel.border = element_blank(),
    panel.grid.major = element_blank(), panel.grid.minor = element_blank()
  )
  
plot_grid(
  p4 + scale_fill_material("red"), 
  p4 + scale_fill_material("pink"),
  p4 + scale_fill_material("purple"), 
  p4 + scale_fill_material("deep-purple"),
  p4 + scale_fill_material("indigo"), 
  p4 + scale_fill_material("blue"),
  p4 + scale_fill_material("light-blue"), 
  p4 + scale_fill_material("cyan"),
  p4 + scale_fill_material("teal"), 
  p4 + scale_fill_material("green"),
  p4 + scale_fill_material("light-green"), 
  p4 + scale_fill_material("lime"),
  p4 + scale_fill_material("yellow"), 
  p4 + scale_fill_material("amber"),
  p4 + scale_fill_material("orange"), 
  p4 + scale_fill_material("deep-orange"),
  p4 + scale_fill_material("brown"), 
  p4 + scale_fill_material("grey"),
  p4 + scale_fill_material("blue-grey"),
  ncol = 6
)

顏色生成函數為

pal_material(
  palette = c("red", "pink", "purple", 
              "deep-purple", "indigo", 
              "blue", "light-blue",
              "cyan", "teal", "green", 
              "light-green", "lime", 
              "yellow", "amber", "orange",
              "deep-orange", "brown", 
              "grey", "blue-grey"),
  n = 10,
  alpha = 1,
  reverse = FALSE
)

例如

show_col(pal_material("indigo")(9))
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容