R 技巧 || 从颜色面板选取颜色

取色板中的颜色

# 查看颜色
library(RColorBrewer)
display.brewer.all()
display.brewer.pal(5, "RdBu")
brewer.pal(3, "RdBu")

以下内容来自:https://www.datanovia.com/en/blog/top-r-color-palettes-to-know-for-great-data-visualization/

用于更改使用ggplot2包或R基本绘图函数生成的图形的默认颜色的顶部R调色板。

演示数据集

我们将使用R内置的iris演示数据集。

head(iris, 6)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

创建一个按组着色的基本ggplot

您可以通过以下方式根据分组变量更改颜色:

  • 将参数映射color到目标变量。这将应用于点,线和文本
  • 将参数映射fill到目标变量。这将更改区域的填充颜色,例如箱形图,条形图,直方图,密度图等。

在我们的例子中,我们将映射选项color,并fill在分组变量Species分别为散点图和箱形图。

使用Species变量级别按组更改颜色:

library("ggplot2")
# Box plot
bp <- ggplot(iris, aes(Species, Sepal.Length)) + 
  geom_boxplot(aes(fill = Species)) +
  theme_minimal() +
  theme(legend.position = "top")
bp

# Scatter plot
sp <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
  geom_point(aes(color = Species)) +
  theme_minimal()+
  theme(legend.position = "top")
sp
image
image

Viridis调色板

viridis[R包(由西蒙·卡尼尔)提供了调色板,使美丽的情节是:打印机友好的,感知均匀,易于被那些色盲阅读。

如下安装并加载软件包:

install.packages("viridis")  # Install
library("viridis")           # Load

viridis软件包包含四个顺序的色标:“ Viridis”(主要选择)和三个具有类似属性的替代色标(“岩浆”,“血浆”和“地狱”)。

image

主要功能:

  • scale_color_viridis():更改点,线和文本的颜色
  • scale_fill_viridis():更改区域的填充颜色(箱形图,条形图等)
  • viridis(n)magma(n)inferno(n)plasma(n):生成用于基情节,其中调色板n是的颜色来返回数量。

请注意,函数scale_color_viridis()scale_fill_viridis()具有一个名为的参数option,该参数是一个字符串,指示要使用的colormap选项。共有四个选项:“岩浆”(或“ A”),“地狱”(或“ B”),“血浆”(或“ C”)和“ viridis”(或“ D”,默认选项)。

  1. ggplot2中的用法
library(ggplot2)
# Gradient color
ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(color = Sepal.Length)) +
  scale_color_viridis(option = "D")+
  theme_minimal() +
  theme(legend.position = "bottom")

# Discrete color. use the argument discrete = TRUE
ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(color = Species)) +
  geom_smooth(aes(color = Species, fill = Species), method = "lm") + 
  scale_color_viridis(discrete = TRUE, option = "D")+
  scale_fill_viridis(discrete = TRUE) +
  theme_minimal() +
  theme(legend.position = "bottom")
image
image
  1. 基本图中的用法。使用该函数viridis()生成所需的颜色数量:
barplot(1:10, col = viridis(10))
image

RColorBrewer调色板

RColorBrewer软件包创建了一个漂亮的调色板。您应该首先按照以下步骤进行安装:install.packages("RColorBrewer")

要显示包装中的所有调色板,请键入以下内容:

library(RColorBrewer)
display.brewer.all()
image

该软件包包含3种类型的调色板:顺序,发散和定性。

  1. 顺序调色板(第一个颜色列表),适合从低到高(渐变)的有序数据。调色板名称为:蓝调,BuGn,BuPu,GnBu,绿色,灰色,橘子,OrRd,PuBu,PuBuGn,PuRd,Purples,RdPu,Reds,YlGn,YlGnBu YlOrBr,YlOrRd。
  2. 定性调色板(第二种颜色列表),最适合表示名义或分类数据。它们并不暗示组之间的大小差异。调色板名称为:重音,暗2,成对,柔和1,柔和2,设置1,设置2,设置3。
  3. 不同的调色板(第三种颜色列表),同样强调数据范围两端的中间范围临界值和极限值。不同的调色板是:BrBG,PiYG,PRGn,PuOr,RdBu,RdGy,RdYlBu,RdYlGn,光谱

RColorBrewer软件包还包括三个重要功能:

# 1\. Return the hexadecimal color specification 
brewer.pal(n, name)

# 2\. Display a single RColorBrewer palette 
# by specifying its name
display.brewer.pal(n, name)

# 3\. Display all color palette
display.brewer.all(n = NULL, type = "all", select = NULL,
                   colorblindFriendly = FALSE)

函数参数说明:

  • n:调色板中不同颜色的数量,最少3种,最大数量取决于调色板。
  • name:以上列表中的调色板名称。例如name = RdBu
  • type:要显示的调色板类型。允许的值为以下之一:“ div”,“ qual”,“ seq”或“ all”。
  • select:要显示的调色板名称列表。
  • colorblindFriendly:如果为TRUE,则仅显示色盲友好调色板。

要仅显示色盲友好的酿酒机调色板,请使用以下R代码:

display.brewer.all(colorblindFriendly = TRUE)
image

您还可以通过如下指定其名称来查看单个RColorBrewer调色板:

# View a single RColorBrewer palette by specifying its name
display.brewer.pal(n = 8, name = 'Dark2')
image
# Hexadecimal color specification 
brewer.pal(n = 8, name = "Dark2")
## [1] "#1B9E77" "#D95F02" "#7570B3" "#E7298A" "#66A61E" "#E6AB02" "#A6761D"
## [8] "#666666"

ggplot2中的用法。ggplot2中有两个色标功能可用于使用Brebrewer调色板:

  • scale_fill_brewer() 用于箱形图,条形图,小提琴图,点图等
  • scale_color_brewer() 用于线和点
# Box plot
bp + scale_fill_brewer(palette = "Dark2")

# Scatter plot
sp + scale_color_brewer(palette = "Dark2")
image
image

在基本图中的用法。该函数brewer.pal()用于生成颜色向量。

# Barplot using RColorBrewer
barplot(c(2,5,7), col = brewer.pal(n = 3, name = "RdBu"))

灰色调色板

主要功能:

  • scale_fill_grey() 用于箱形图,条形图,小提琴图,点图等
  • scale_colour_grey() 用于点,线等
# Box plot
bp + scale_fill_grey(start = 0.8, end = 0.2) 

# Scatter plot
sp + scale_color_grey(start = 0.8, end = 0.2) 
image
image

科学期刊调色板

R软件包ggsci包含一组高质量的调色板,这些调色板的灵感来自科学期刊,数据可视化库等中使用的颜色。

调色板作为ggplot2比例函数提供:

  • scale_color_npg()scale_fill_npg():Nature Publishing Group的调色板
  • scale_color_aaas()scale_fill_aaas():美国科学促进会调色板
  • scale_color_lancet()scale_fill_lancet():柳叶刀期刊调色板
  • scale_color_jco()scale_fill_jco():临床肿瘤学杂志调色板
  • scale_color_tron()and scale_fill_tron():此调色板的灵感来自Tron Legacy中使用的颜色。当使用深色主题时,它适合显示数据。

您可以在ggsci包vignettes中找到更多示例。

请注意,对于基本图,可以使用相应的调色板生成器来创建颜色列表。例如,您可以使用:pal_npg(),pal_aaas(),pal_lancet(),pal_jco()等。

  1. ggplot2中的用法。我们将使用JCO和Tron Legacy调色板。
library("ggplot2")
library("ggsci")
# Change area fill color. JCO palette
ggplot(iris, aes(Species, Sepal.Length)) +
  geom_boxplot(aes(fill = Species)) +
  scale_fill_jco()+
  theme_classic() +
  theme(legend.position = "top")

# Change point color and the confidence band fill color. 
# Use tron palette on dark theme
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(aes(color = Species)) +
  geom_smooth(aes(color = Species, fill = Species)) + 
  scale_color_tron()+
  scale_fill_tron()+
  theme_dark() +
  theme(
    legend.position = "top",
    panel.background = element_rect(fill = "#2D2D2D"),
    legend.key = element_rect(fill = "#2D2D2D")
    )
image
image
  1. 基本图中的用法
par(mar = c(1, 3.5, 1, 1))
barplot(1:10, col = pal_jco()(10))
image

Wes Anderson调色板

从Github(devtools::install_github("karthik/wesanderson"))安装最新的开发版本,或从CRAN(install.packages("wesanderson"))安装。

它包含Wes Anderson电影中的16种调色板:

library(wesanderson)
names(wes_palettes)
##  [1] "BottleRocket1"  "BottleRocket2"  "Rushmore1"      "Royal1"        
##  [5] "Royal2"         "Zissou1"        "Darjeeling1"    "Darjeeling2"   
##  [9] "Chevalier1"     "FantasticFox1"  "Moonrise1"      "Moonrise2"     
## [13] "Moonrise3"      "Cavalcanti1"    "GrandBudapest1" "GrandBudapest2"

包中用于生成颜色向量的键R函数是

wes_palette(name, n, type = c("discrete", "continuous"))
  • name:所需调色板的名称
  • n:所需的颜色数。不幸的是,大多数调色板现在只有4或5种颜色。
  • type:“连续”或“离散”。如果要自动在颜色之间进行插值,请使用连续。

如果您需要的颜色比调色板中通常所能找到的更多,则可以使用连续调色板在现有颜色之间进行插值。

可用的调色板是:

image

ggplot2中的用法:

library(wesanderson)
# Discrete color
bp + scale_fill_manual(values = wes_palette("GrandBudapest1", n = 3))

# Gradient color
pal <- wes_palette("Zissou1", 100, type = "continuous")
ggplot(heatmap, aes(x = X2, y = X1, fill = value)) +
  geom_tile() + 
  scale_fill_gradientn(colours = pal) + 
  scale_x_discrete(expand = c(0, 0)) +
  scale_y_discrete(expand = c(0, 0)) + 
  coord_equal() 
image
image

在基本图中的用法:

barplot(1:10, col = wes_palette("Zissou1", 10, type = "continuous"))
image

R基本调色板

存在可以被用来生成的n个连续的颜色的矢量5个R基函数:rainbow(n)heat.colors(n)terrain.colors(n)topo.colors(n),和cm.colors(n)

image

在R基本图中的用法:

barplot(1:5, col=rainbow(5))
# Use heat.colors
barplot(1:5, col=heat.colors(5))
# Use terrain.colors
barplot(1:5, col=terrain.colors(5))
# Use topo.colors
barplot(1:5, col=topo.colors(5))
# Use cm.colors
barplot(1:5, col=cm.colors(5))

结论

我们展示了顶部的R调色板,以定制由ggplot2包或R基本函数生成的图形。要点总结如下。

  • 创建一个基本的ggplot。将color参数映射到因子或分组变量。
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(color = Species))
p
  • 使用自定义色标手动设置调色板:
p + scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
  • 使用对色盲友好的调色板:
cbp1 <- c("#999999", "#E69F00", "#56B4E9", "#009E73",
          "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
p + scale_color_manual(values = cbp1)
  • 使用RColorBrewer调色板:
p + scale_color_brewer(palette = "Dark2")
  • 使用翠绿色标:
library(viridis)
p + scale_color_viridis(discrete = TRUE)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342