<p>已经有一些好的和有用的建议,但让我补充几点:</p>
<ol>
<li>viridis和magma调色板是具有多种颜色的顺序调色板。因此,沿着比例你从非常浅的颜色增加到相当深的颜色。同时,色彩增加,色调从黄色变为蓝色(通过绿色或通过红色)。</li>
<li>可以通过组合两个顺序调色板来创建发散调色板。通常,你把它们加入浅色,然后让它们分岔成不同的深色。</li>
<li>通常,一个使用单一色调的顺序调色板,从一个中性浅灰色发散到两个不同的深色。尽管调色板的不同“臂”在亮度(明暗)和色度(色彩)方面是平衡的,但人们还是应该注意。</li>
</ol>
<p>因此,岩浆和绿柱石的结合效果并不好。你可以让它们从一个类似的黄色发散,但你会发散到类似的蓝色。同样,随着颜色的变化,判断你在调色板的哪一个手臂上会变得更加困难。</p>
<p>正如其他人提到的,ColorBrewer.org提供了良好的分色调色板。Moreland的方法也很有用。另一个通用的解决方案是<code>colorspace</code>包中的<code>diverging_hcl()</code>函数。在<a href="https://arxiv.org/abs/1903.06490" rel="nofollow noreferrer">https://arxiv.org/abs/1903.06490</a>(即将在JSS中发布)的随附论文中,描述了构造原理,以及基于HCL的一般策略如何近似ColorBrewer.org、CARTO等中的许多调色板。
(之前的参考文献包括我们在CSDA的<a href="http://dx.doi.org/10.1016/j.csda.2008.11.033" rel="nofollow noreferrer">http://dx.doi.org/10.1016/j.csda.2008.11.033</a>上的初步工作,以及针对气象学的进一步建议,但在BAMS的<a href="http://dx.doi.org/10.1175/BAMS-D-13-00155.1" rel="nofollow noreferrer">http://dx.doi.org/10.1175/BAMS-D-13-00155.1</a>上的一篇论文中可以应用。)</p>
<p>我们在HCL空间(色调-色度-亮度)中的解决方案的优点是,您可以相对容易地解释坐标。它确实需要一些实践,但不像其他解决方案那样不透明。此外,我们还提供了一个GUI <code>hclwizard()</code>(见下文),帮助理解不同坐标的重要性。</p>
<p>只要两种颜色(参数<code>h</code>)、最大色度(<code>c</code>)和最小/最大亮度(<code>l</code>)被适当地选择,问题和其他答案中的大多数调色板都可以通过<code>diverging_hcl()</code>非常接近地匹配。此外,可能需要调整<code>power</code>参数,该参数分别控制色度和亮度增加的速度。通常,色度的增加比较快(<code>power[1] < 1</code>),而亮度的增加比较慢(<code>power[2] > 1</code>)。</p>
<p>例如,Moreland的“cool warm”调色板使用蓝色(<code>h = 250</code>)和红色(<code>h = 10</code>)色调,但亮度对比度相对较小(<code>l = 37</code>与<code>l = 88</code>):</p>
<pre><code>coolwarm_hcl <- colorspace::diverging_hcl(11,
h = c(250, 10), c = 100, l = c(37, 88), power = c(0.7, 1.7))
</code></pre>
<p>看起来非常相似(见下文):</p>
<pre><code>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])
</code></pre>
<p>相比之下,ColorBrewer.org的BrBG调色板亮度对比度要高得多(<code>l = 20</code>比<code>l = 95</code>):</p>
<pre><code>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))
</code></pre>
<p>下面将结果调色板与原始调色板下面基于HCL的版本进行比较。你看,它们不一样,但很接近。在右边,我还将绿脓杆菌和血浆与基于盐酸的调色板进行了匹配。</p>
<p><a href="https://i.stack.imgur.com/nxSiv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/nxSiv.png" alt="palettes"/></a></p>
<p>你是喜欢冷暖色调还是BrBG色调可能取决于你的个人品味,但更重要的是,你想在你的视觉效果中展现什么。如果偏差的<em>符号</em>最为重要,那么冷暖条件下的低亮度对比度将更为有用。如果您想显示(极端)偏差的<em>大小</em>,高亮度对比度将更有用。以上的论文提供了更为实际的指导。</p>
<p>上图的其余复制代码是:</p>
<pre><code>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)
</code></pre>
<p><strong>更新:</strong>这些来自其他工具(ColorBrewer.org、viridis、scico、CARTO,…)的基于HCL的近似颜色现在也可以作为<code>colorspace</code>包和基本<code>grDevices</code>包(从3.6.0开始)中的<code>hcl.colors()</code>函数中的命名调色板使用。因此,你现在可以也可以简单地说:</p>
<pre><code>colorspace::sequential_hcl(11, "viridis")
grDevices::hcl.colors(11, "viridis")
</code></pre>
<p>最后,您可以在闪亮的应用程序中交互探索我们建议的颜色:
<a href="http://hclwizard.org:64230/hclwizard/" rel="nofollow noreferrer">http://hclwizard.org:64230/hclwizard/</a>。对于R的用户,您还可以在本地计算机上启动shiny应用程序(运行速度比我们的服务器快一些),或者运行Tcl/Tk版本的应用程序(甚至更快):</p>
<pre><code>colorspace::hclwizard(gui = "shiny")
colorspace::hclwizard(gui = "tcltk")
</code></pre>
<p>如果您想了解调色板在RGB和HCL坐标系中的路径,那么<code>colorspace::specplot()</code>非常有用。请参见示例<code>colorspace::specplot(coolwarm)</code>。</p>