R-为颜色调色板中的最低值指定特殊颜色

R-为颜色调色板中的最低值指定特殊颜色,r,colors,gradient,heatmap,R,Colors,Gradient,Heatmap,我有这样一个数据帧: library(lubridate) date_list = seq(ymd('2017-01-01'),ymd('2018-12-31'),by='day') values = sample(0:35, 730, replace=TRUE) testframe = data.frame(Date = date_list, Value = values) 这些值介于0和35之间。我想用这些数据创建一个热图,颜色从lightblue1到royalblue。我的问题是,我想

我有这样一个数据帧:

library(lubridate)
date_list = seq(ymd('2017-01-01'),ymd('2018-12-31'),by='day')

values = sample(0:35, 730, replace=TRUE)
testframe = data.frame(Date = date_list, Value = values)
这些值介于0和35之间。我想用这些数据创建一个热图,颜色从lightblue1到royalblue。我的问题是,我想突出显示0的值。它们应该以红色突出。所以我不想有一个从0到下一个数字的梯度,我完全想把0和1分开。因此,所有0都应该是红色,所有其他值应该以从浅蓝色1到深蓝色的渐变色显示

我使用的是一个热图,其中包含colorRampPalette,完整代码如下:

当我添加
b更新的答案时
除了添加行之外

b2b <- c("lightblue1", "royalblue")

注意,我已经减少了那里的颜色数量。如果
ncolors
值过高,红色会消失,因此您必须注意这一点

旧答案 你链接的代码相当长,所以我没有花时间研究它。相反,我为您的一般问题生成以下解决方案:

首先,创建一个提供基本颜色渐变的函数:

foo <- colorRampPalette(c("lightblue1", "royalblue"))
我在你的帖子中生成数据(为再现性设定种子):

并尝试以下功能:

plot(date_list, values, col = bar(values), pch = 19)

Thx,这正是我想要的。不幸的是,我无法在代码中正确使用它。实际上,只有3条线用于颜色。其第46行用于指定梯度,第80-86行和第127行。我试图添加b2b@Mr.Spock,我对您现在正在寻找的内容有了更好的了解。我会马上更新答案。不用担心,@Spock先生——很高兴能帮上忙!
calendarHeat(date_list, values, color = "b2b", ncolors = 15)
foo <- colorRampPalette(c("lightblue1", "royalblue"))
bar <- function(x) {
    pal <- foo(length(x))
    pal[which(x == 0)] <- "red"
    return(pal)
}
library(lubridate)
date_list = seq(ymd('2017-01-01'),ymd('2018-12-31'),by='day')
set.seed(123)
values = sample(0:35, 730, replace=TRUE)
plot(date_list, values, col = bar(values), pch = 19)