R语言ggplot2-颜色设置调参详解

本章是ggplot2科研绘图调参的第十一个章节,前十章内容请跳转:

ggplot保姆级教程-科研绘图调参细节

library(tidyverse)
library(ggplot2)
theme_set(theme_bw())

数据集

本文使用 空气污染导致全国发病率和死亡率研究 (NMMAPS). 为了使图表易于管理,我们将数据限制在芝加哥和 1997-2000 年。有关此数据集的更多详细信息,请参阅 Roger Peng 的书 Statistical Methods in Environmental Epidemiology with R.

使用 {rio} 包中的 import函数 将数据导入到我们的 R 中。为了稍后访问数据,我们使用赋值箭头<-将其存储在名为chic的变量中。

library(rio)
chic <- import("/Users/cpf/Documents/paper/writting_blog/data/chicago-nmmaps.csv")

11.调整颜色

ggplot2 中的颜色主要使用到两个参数,color颜色和fill填充,这两个参数都可以用来:

  1. 指定为单色
  2. 赋值给变量。

正如您在本教程开头所见,aes美学内部的变量由变量编码,aes美学外部的变量是与变量无关的属性。通过下图显示每年和每季的记录数量可以说明了这一事实:

ggplot(chic, aes(year)) + 
  geom_bar(aes(fill = season), color = "grey", size = 3) + 
  labs(x = "year", y = "Observation", fill = "Season:")

R语言ggplot2-颜色设置调参详解_第1张图片

11.1 选择单色

静态的单一颜色易于使用。我们可以为 geom 指定一种颜色:

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(color = "steelblue", size = 2) +
  labs(x = "Year", y = "Temperature (°F)")

R语言ggplot2-颜色设置调参详解_第2张图片

如果它同时提供颜色color(轮廓颜色)和填充fill(填充颜色):

ggplot(chic, aes(x = date, y = temp)) +
  geom_point(shape = 21, size = 2, stroke = 1,
             color = "#3cc08f", fill = "#c08f3c") +
  labs(x = "Year", y = "Temperature (°F)")

R语言ggplot2-颜色设置调参详解_第3张图片

11.2分类变量颜色调整

ggplot2 中,分配给变量的颜色通过 scale_color_* 和 scale_fill_* 函数进行修改。为了对您的数据使用颜色,最重要的是您需要知道您是在处理分类变量还是连续变量。应根据变量的类型选择调色板,连续或发散调色板用于连续变量,定性调色板用于分类变量:

定性或分类变量表示可以分为组(类别)的数据类型。变量可以进一步指定为名义、有序和二元(二分)。
默认的分类调色板如下所示:

(ga <- ggplot(chic, aes(x = date, y = temp, color = season)) +
  geom_point() +
  labs(x = "Year", y = "Temperature (°F)", color = NULL))

R语言ggplot2-颜色设置调参详解_第4张图片

手动选择变量颜色

您可以选择自己的一组颜色并通过函数 scale_*_manual() 将它们分配给分类变量(* 可以是colorcolourfill)。指定颜色的数量必须与类别数量匹配:

ga + scale_color_manual(values = c("dodgerblue4",
                                   "darkolivegreen4",
                                   "darkorchid3",
                                   "goldenrod1"))

R语言ggplot2-颜色设置调参详解_第5张图片

使用内置的定性调色板

ColorBrewer 调色板是一种流行的在线工具,用于为地图选择配色方案。不同的颜色组旨在产生具有相似外观的有吸引力的配色方案,范围从三到十二不等。这些调色板可作为 ggplot2 包中的内置函数使用,并且可以通过调用 scale_*_brewer() 来应用:

ga + scale_color_brewer(palette = "Set1")

R语言ggplot2-颜色设置调参详解_第6张图片

使用扩展包中的调色板

有许多扩展包提供额外的调色板。它们的用途因包的设计方式而异。有关 R 中可用调色板的广泛概述,可以使用 paletteer 包,这是 R 中使用一致语法的调色板的集合。

例子:

例如,ggthemes 包允许 R 用户访问 Tableau 颜色。 Tableau 是著名的可视化软件,具有众所周知的调色板。

library(ggthemes)
ga + scale_color_tableau()

R语言ggplot2-颜色设置调参详解_第7张图片

ggsci 包提供科学期刊和科幻主题的调色板。想要有一个看起来像发表在科学或自然中的颜色的主题吗?

library(ggsci)
g1 <- ga + scale_color_aaas()
g2 <- ga + scale_color_npg()

library(patchwork)
(g1 + g2) * theme_bw() * theme(legend.position = "top")

R语言ggplot2-颜色设置调参详解_第8张图片

11.3 数值变量颜色调整

定量变量表示可测量的数量,因此是数字变量。定量数据可以进一步分类为连续(可能是浮点数)或离散(仅限整数):

在我们的示例中,我们将要着色的变量更改为臭氧,这是一个与温度密切相关的连续变量(更高的温度 = 更高的臭氧)。函数 scale_*gradient() 是一个顺序梯度,而 scale*_gradient2() 是发散的。

这是连续变量的默认 ggplot2 顺序配色方案:

gb <- ggplot(chic, aes(x = date, y = temp, color = temp)) +
  geom_point() +
  labs(x = "Year", y = "Temperature (°F)", color = "Temperature (°F):")

gb + scale_color_continuous()

R语言ggplot2-颜色设置调参详解_第9张图片

这是不同的默认配色方案:

mid <- mean(chic$temp)  ## midpoint

gb + scale_color_gradient2(midpoint = mid)

R语言ggplot2-颜色设置调参详解_第10张图片

手动设置顺序配色方案

您可以通过 scale_*_gradient() 为连续变量手动设置逐渐变化的调色板:

gb + scale_color_gradient(low = "darkkhaki",
                          high = "darkgreen")

R语言ggplot2-颜色设置调参详解_第11张图片

温度数据是正态分布的,那么发散的配色方案(而不是顺序)。对于发散的颜色,您可以使用 scale_*_gradient2() 函数:

gb + scale_color_gradient2(midpoint = mid, low = "#dd8a0b",
                           mid = "grey92", high = "#32a676")

R语言ggplot2-颜色设置调参详解_第12张图片

美丽的 Viridis 调色板

Viridis 调色板不仅使您的绘图看起来漂亮且易于感知,而且色盲的人也更容易阅读并且灰度打印效果很好。

而且它们现在还附带 ggplot2!以下多面板图说明了四个 Viridis 调色板中的三个:

p1 <- gb + scale_color_viridis_c() + ggtitle("'viridis' (default)")
p2 <- gb + scale_color_viridis_c(option = "inferno") + ggtitle("'inferno'")
p3 <- gb + scale_color_viridis_c(option = "plasma") + ggtitle("'plasma'")
p4 <- gb + scale_color_viridis_c(option = "cividis") + ggtitle("'cividis'")

library(patchwork)
(p1 + p2 + p3 + p4) * theme(legend.position = "bottom")

R语言ggplot2-颜色设置调参详解_第13张图片

也可以将 Viridis 调色板用于离散变量:

ga + scale_color_viridis_d(guide = "none")

R语言ggplot2-颜色设置调参详解_第14张图片

使用扩展包中的定量调色板

许多扩展包不仅提供额外的分类调色板,还提供顺序、发散甚至循环调色板。

例子:

racrtocolors包

rcartocolors 包将漂亮的 CARTOcolors 移植到 ggplot2 并包含几个我最常用的调色板:

library(rcartocolor)
g1 <- gb + scale_color_carto_c(palette = "BurgYl")
g2 <- gb + scale_color_carto_c(palette = "Earth")

(g1 + g2) * theme(legend.position = "bottom")

R语言ggplot2-颜色设置调参详解_第15张图片

scico包

scico 包提供对 Fabio Crameri 开发的调色板的访问。这些调色板不仅美观而且通常不寻常,而且还是一个不错的选择,因为它们在感知上是统一和有序的。此外,它们适用于有色觉缺陷和灰度的人:

library(scico)

g1 <- gb + scale_color_scico(palette = "berlin")
g2 <- gb + scale_color_scico(palette = "hawaii", direction = -1)

(g1 + g2) * theme(legend.position = "bottom")

R语言ggplot2-颜色设置调参详解_第16张图片

11.4 最后修改调色板

从 ggplot2 3.0.0 的最新版本开始,可以在将图层映射到数据后修改图层美感。或者正如 ggplot2 所说:“使用 after_scale() 来标记数据缩放后的映射评估。”

那么为什么不首先使用修改后的颜色呢?由于 ggplot2 只能处理一种颜色color和一种填充比例fill scale,这是一个有趣的功能。仔细查看以下示例,其中我们使用 ggdark 包中的 invert_color():

library(ggdark)

ggplot(chic, aes(date, temp, color = temp)) +
  geom_point(size = 5) +
  geom_point(aes(color = temp,
                 color = after_scale(invert_color(color))),
             size = 2) +
  scale_color_scico(palette = "hawaii", guide = "none") +
  labs(x = "Year", y = "Temperature (°F)")

R语言ggplot2-颜色设置调参详解_第17张图片

之后更改配色方案对于 ggdarkcolorspace 包中的函数特别有趣,即 invert_color()、lighten()、darken() 和 desature()。您甚至可以组合这些功能。在这里,我们绘制了一个包含参数arguments、颜色color和填充fill的箱线图:

library(colorspace)

ggplot(chic, aes(date, temp)) +
  geom_boxplot(aes(color = season,
                   fill = after_scale(desaturate(lighten(color, .6), .6))),
               size = 1) +
  scale_color_brewer(palette = "Dark2", guide = "none") +
  labs(x = "Year", y = "Temperature (°F)")

R语言ggplot2-颜色设置调参详解_第18张图片

请注意,您需要指定颜色和/或填充相应 geom_*() 或 stat_*() 的 aes() 以使 after_scale() 工作。

你可能感兴趣的:(R语言vs科研,可视化,r语言,数据分析)