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

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相关问答推荐

混淆矩阵,其中每列和等于1

在边界外添加注释或标题

R等效于LABpascal(n,1)不同的列符号

在R中替换函数中的特定符号

在for循环中转换rabrame

如何使用列表中多个列表中的第一条记录创建数据框

矩阵的堆叠条形图,条形图上有数字作为标签

如何基于两个条件从一列中提取行

哪一行和行和 Select 特定行,但是考虑到Nas

将多个列值转换为二进制

正则表达式在第二个管道和第二个T之后拆分R中的列

将具有坐标列表列的三角形转换为多个多边形

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

R代码,用于在线条图下显示观测表

如何在Quarto中使用美人鱼图表中的标记来加粗文本

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

动态统计函数在ShinyApp内部更改

使用nls()函数的非线性模型的半正态图

GgHighlight找不到它创建的列:`Highlight..1`->;`Highlight.....`

R data.设置函数&;连接中的列值而不使用for循环的表方法?