我有兴趣拥有一个"好"的发散色托盘.很明显,可以只使用红色、白色和蓝色:

img <- function(obj, nam) {
  image(1:length(obj), 1, as.matrix(1:length(obj)), col=obj, 
        main = nam, ylab = "", xaxt = "n", yaxt = "n",  bty = "n")
}
rwb <- colorRampPalette(colors = c("red", "white", "blue"))
img(rwb(100), "red-white-blue")

enter image description here

因为我最近爱上了viridis color palettes,所以我希望将翡翠和岩浆结合起来,形成这种不同的 colored颜色 (当然,色盲的人只会看到 colored颜色 的绝对值,但有时也可以).

当我try 组合viridis和magma时,我发现它们不会在同一个位置"结束"(或"开始"),所以我得到了类似的结果(我使用的是R,但对于python用户来说可能是一样的):

library(viridis)
img(c(rev(viridis(100, begin = 0)), magma(100, begin = 0)), "magma-viridis")

enter image description here

我们可以看到,当接近零时,翡翠是紫色的,而岩浆是黑色的.我希望它们都从同一个点开始(或多或少),所以我try 使用0.3作为起点:

img(c(rev(viridis(100, begin = 0.3)), magma(100, begin = 0.3)), "-viridis-magma(0.3)")

enter image description here

这确实更好,但我想知道是否有更好的解决方案.

(我也在"标记"python用户,因为viridis最初来自matplotlib,所以使用它的人可能知道这样的解决方案.)

谢谢

推荐答案

我觉得Kenneth Moreland's proposal英镑很有用.它现在已在heatmaply年实施为cool_warm:

# install.packages("heatmaply")
img(heatmaply::cool_warm(500), "Cool-warm, (Moreland 2009)")

cool-warm colormap This it how it looks like in action compared to an interpolated RColorBrewer "RdBu": comparison

R相关问答推荐

数据框列是多列值的偏移量 - 需要优雅的解决方案

总结学生try 重复的项目

将密码添加到 blogdown 网站的一页

R:用 NA 随机替换值

在 R + 中zoom 和居中多个列,为新列添加新名称

如何用 5 个字符创建 100000 的唯一标识符?

展平嵌套列表并保留每个底层元素的所有父键

使用 ggplot2 创建一个中心 y 轴图,左右两侧有两个 x 轴

expss表输出的rbinding表错误

根据 R 中其他三列的值创建新列

将行拆分为两行

当新列名作为字符向量给出时,在“data.table”中对数据进行分组的好方法

返回 R 中的第 90 个百分位值

应用 ifelse 而不使用 R 应用 for 循环

调用堆栈的稳定性如何,特别是 -1?

列出到 knitr 环境(在 R 块中使用 list2env 时出现 R-markdown 错误)

如何根据值在矩阵上水平移动行

如何将列变成R中的列名

可以使 data.table 输出看起来更像 tibble 输出吗? (10 行,仅打印适合屏幕的列)

如何粘贴数据框行中的文本,仅在 R 中保留唯一值