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:")

在这里插入图片描述

11.1 选择单色

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

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

在这里插入图片描述

如果它同时提供颜色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)")

在这里插入图片描述

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

在这里插入图片描述

手动选择变量颜色

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

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

在这里插入图片描述

使用内置的定性调色板

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

ga + scale_color_brewer(palette = "Set1")

在这里插入图片描述

使用扩展包中的调色板

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

例子:

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

library(ggthemes)
ga + scale_color_tableau()

在这里插入图片描述

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

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

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

在这里插入图片描述

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()

在这里插入图片描述

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

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

gb + scale_color_gradient2(midpoint = mid)

在这里插入图片描述

手动设置顺序配色方案

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

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

在这里插入图片描述

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

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

在这里插入图片描述

美丽的 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")

在这里插入图片描述

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

ga + scale_color_viridis_d(guide = "none")

在这里插入图片描述

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

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

例子:

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")

在这里插入图片描述

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")

在这里插入图片描述

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)")

在这里插入图片描述

之后更改配色方案对于 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)")

在这里插入图片描述

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

  • 33
    点赞
  • 215
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RookieTrevor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值