R - 为 colorRampPalette 中的最低值分配特殊颜色
R - Assign special color for lowest value in colorRampPalette
我有一个这样的数据框:
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 都应该是红色的,所有其他值应该以从 lightblue1 到 royalblue 的渐变着色。
我正在使用包含 colorRampPalette 的热图,完整代码在这里:Heatmap Code
当我在代码的第 83 行添加 btb<- c("lightblue1", "royalblue")
并更改第 46 行的颜色时,我得到了没有红色的渐变。现在如何为所有 0 添加红色?
关于如何解决这个问题有什么建议吗?
更新答案
除了添加行
b2b <- c("lightblue1", "royalblue")
你还需要改变
calendar.pal <- colorRampPalette((col.sty), space = "Lab")
类似于
calendar.pal1 <- colorRampPalette((col.sty), space = "Lab")
calendar.pal <- function(n) c("red", calendar.pal1(n-1))
然后,我们就可以得到你想要的红色高亮了
calendarHeat(date_list, values, color = "b2b", ncolors = 15)
请注意,我已经减少了那里的颜色数量。如果 ncolors
值太高,红色消失,所以你必须注意。
旧答案
您链接的代码很长,所以我没有花时间研究它。相反,我针对您的一般问题生成以下解决方案:
首先,创建一个提供基本色带的函数:
foo <- colorRampPalette(c("lightblue1", "royalblue"))
然后,创建一个 调用 foo()
颜色渐变的函数,但根据此处的突出显示规则对其进行修改:
bar <- function(x) {
pal <- foo(length(x))
pal[which(x == 0)] <- "red"
return(pal)
}
我按照你的方式生成数据 post(为可重复性设置种子):
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)
我有一个这样的数据框:
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 都应该是红色的,所有其他值应该以从 lightblue1 到 royalblue 的渐变着色。
我正在使用包含 colorRampPalette 的热图,完整代码在这里:Heatmap Code
当我在代码的第 83 行添加 btb<- c("lightblue1", "royalblue")
并更改第 46 行的颜色时,我得到了没有红色的渐变。现在如何为所有 0 添加红色?
关于如何解决这个问题有什么建议吗?
更新答案
除了添加行
b2b <- c("lightblue1", "royalblue")
你还需要改变
calendar.pal <- colorRampPalette((col.sty), space = "Lab")
类似于
calendar.pal1 <- colorRampPalette((col.sty), space = "Lab")
calendar.pal <- function(n) c("red", calendar.pal1(n-1))
然后,我们就可以得到你想要的红色高亮了
calendarHeat(date_list, values, color = "b2b", ncolors = 15)
请注意,我已经减少了那里的颜色数量。如果 ncolors
值太高,红色消失,所以你必须注意。
旧答案
您链接的代码很长,所以我没有花时间研究它。相反,我针对您的一般问题生成以下解决方案:
首先,创建一个提供基本色带的函数:
foo <- colorRampPalette(c("lightblue1", "royalblue"))
然后,创建一个 调用 foo()
颜色渐变的函数,但根据此处的突出显示规则对其进行修改:
bar <- function(x) {
pal <- foo(length(x))
pal[which(x == 0)] <- "red"
return(pal)
}
我按照你的方式生成数据 post(为可重复性设置种子):
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)