已经有一些好的和有用的建议,但让我补充几点:
- 绿色和岩浆调色板是具有多种色调的连续调色板。因此,沿着刻度,您会从非常浅的颜色增加到相当深的颜色。同时色彩增加,色调从黄色变为蓝色(通过绿色或通过红色)。
- 可以通过组合两个连续的调色板来创建不同的调色板。通常,您将它们加入浅色,然后让它们分散到不同的深色。
- 通常,使用从中性浅灰色到两种不同深色的单色调顺序调色板。应该注意的是,调色板的不同“臂”在亮度(明暗)和色度(色度)方面是平衡的。
因此,将岩浆和绿色结合起来效果不佳。你可以让它们从类似的淡黄色发散,但你会发散到类似的蓝色。此外,随着色调的变化,判断你是调色板的哪一个臂会变得更加困难。
正如其他人所提到的,ColorBrewer.org 提供了很好的多样化调色板。 Moreland 的方法也很有用。另一个通用解决方案是colorspace 包中的diverging_hcl() 函数。在https://arxiv.org/abs/1903.06490(即将在 JSS 中发表)的随附论文中描述了构造原理,以及基于 HCL 的一般策略如何近似来自 ColorBrewer.org、CARTO 等的众多调色板。
(早期的参考资料包括我们在 CSDA 的初步工作http://dx.doi.org/10.1016/j.csda.2008.11.033 以及针对气象学的进一步建议,但适用于其他方面,在http://dx.doi.org/10.1175/BAMS-D-13-00155.1 的 BAMS 论文中。)
我们在 HCL 空间(色调-色度-亮度)中的解决方案的优势在于您可以相对轻松地解释坐标。它确实需要一些练习,但不像其他解决方案那样不透明。我们还提供了一个 GUI hclwizard()(见下文),有助于理解不同坐标的重要性。
问题中的大多数调色板和其他答案可以通过diverging_hcl() 非常接近地匹配,前提是这两种色调(参数h)、最大色度(c)和最小/最大亮度( l) 选择得当。此外,可能需要调整power 参数,该参数分别控制色度和亮度增加的速度。通常情况下,色度的增加相当快 (power[1] < 1),而亮度增加的速度较慢 (power[2] > 1)。
例如,Moreland 的“冷暖”调色板使用蓝色 (h = 250) 和红色 (h = 10) 色调,但亮度对比度相对较小(l = 37 与 l = 88):
coolwarm_hcl <- colorspace::diverging_hcl(11,
h = c(250, 10), c = 100, l = c(37, 88), power = c(0.7, 1.7))
看起来很相似(见下文):
coolwarm <- Rgnuplot:::GpdivergingColormap(seq(0, 1, length.out = 11),
rgb1 = colorspace::sRGB( 0.230, 0.299, 0.754),
rgb2 = colorspace::sRGB( 0.706, 0.016, 0.150),
outColorspace = "sRGB")
coolwarm[coolwarm > 1] <- 1
coolwarm <- rgb(coolwarm[, 1], coolwarm[, 2], coolwarm[, 3])
相比之下,ColorBrewer.org 的 BrBG 调色板的亮度对比度要高得多(l = 20 与 l = 95):
brbg <- rev(RColorBrewer::brewer.pal(11, "BrBG"))
brbg_hcl <- colorspace::diverging_hcl(11,
h = c(180, 50), c = 80, l = c(20, 95), power = c(0.7, 1.3))
下面将生成的调色板与原始调色板下方的基于 HCL 的版本进行比较。您会看到这些并不相同,而是相当接近。在右侧,我还将 viridis 和 Plasma 与基于 HCL 的调色板进行了匹配。
您更喜欢冷暖色调还是 BrBG 调色板可能取决于您的个人品味,但更重要的是,您希望在可视化中呈现什么。如果偏差的符号最重要,则冷暖中的低亮度对比度将更有用。如果您想带出(极端)偏差的大小,则高亮度对比度将更有用。上述论文提供了更多实用指导。
上图其余的复制代码为:
viridis <- viridis::viridis(11)
viridis_hcl <- colorspace::sequential_hcl(11,
h = c(300, 75), c = c(35, 95), l = c(15, 90), power = c(0.8, 1.2))
plasma <- viridis::plasma(11)
plasma_hcl <- colorspace::sequential_hcl(11,
h = c(-100, 100), c = c(60, 100), l = c(15, 95), power = c(2, 0.9))
pal <- function(col, border = "transparent") {
n <- length(col)
plot(0, 0, type="n", xlim = c(0, 1), ylim = c(0, 1),
axes = FALSE, xlab = "", ylab = "")
rect(0:(n-1)/n, 0, 1:n/n, 1, col = col, border = border)
}
par(mar = rep(0, 4), mfrow = c(4, 2))
pal(coolwarm)
pal(viridis)
pal(coolwarm_hcl)
pal(viridis_hcl)
pal(brbg)
pal(plasma)
pal(brbg_hcl)
pal(plasma_hcl)
更新:这些来自其他工具(ColorBrewer.org、viridis、scico、CARTO、...)的基于 HCL 的颜色近似值现在也可在 colorspace 中作为命名调色板使用包和基本grDevices 包中的hcl.colors() 函数(从3.6.0 开始)。因此,您现在也可以轻松地说:
colorspace::sequential_hcl(11, "viridis")
grDevices::hcl.colors(11, "viridis")
最后,您可以在闪亮的应用中以交互方式探索我们建议的颜色:
http://hclwizard.org:64230/hclwizard/。对于 R 的用户,您还可以在您的计算机上本地启动闪亮的应用程序(运行速度比我们的服务器快一些),或者您可以运行它的 Tcl/Tk 版本(甚至更快):
colorspace::hclwizard(gui = "shiny")
colorspace::hclwizard(gui = "tcltk")
如果您想了解调色板的路径在 RGB 和 HCL 坐标中的样子,colorspace::specplot() 很有用。参见例如colorspace::specplot(coolwarm)。