将值映射到r中的绿色

将值映射到r中的绿色,r,R,如何使用预定义的比例(如库(“viridis”)中的viridis)在r中创建颜色比例函数 问题不是如何在ggplot中使用它,而是如何构建一个函数,我可以在指定的值域中输入任意值,并从中检索相应的颜色字符串(rgb、十六进制或任何其他输出格式) colorRamp和colorRampPalette似乎只在给定颜色空间内的两种颜色之间进行插值。但我如何使用viridis来实现这一点呢 编辑: 感谢@sconfluentus的回答,我编写了以下函数,实现了我想要的功能(没有安全检查): libra

如何使用预定义的比例(如
库(“viridis”)
中的viridis)在r中创建颜色比例函数

问题不是如何在ggplot中使用它,而是如何构建一个函数,我可以在指定的值域中输入任意值,并从中检索相应的颜色字符串(rgb、十六进制或任何其他输出格式)

colorRamp
colorRampPalette
似乎只在给定颜色空间内的两种颜色之间进行插值。但我如何使用viridis来实现这一点呢

编辑:

感谢@sconfluentus的回答,我编写了以下函数,实现了我想要的功能(没有安全检查):

library(“viridis”)

number_vectorViridis本身能够创建所需的值,前提是您在自己的函数中正确使用它,并且您知道将创建多少个任意值

viridis(12)
 [1] "#440154FF" "#482173FF" "#433E85FF" "#38598CFF" "#2D708EFF" "#25858EFF" "#1E9B8AFF"
 [8] "#2BB07FFF" "#51C56AFF" "#85D54AFF" "#C2DF23FF" "#FDE725FF"
因此,您可以创建一个函数,该函数接受您的域,计算域中值的长度,然后为每个域创建一系列颜色,以您选择的任何方式操作数据

num_vals=length(x) # substitute nrow  for length if you have rows instead of a list
col_pal = viridis(num_vals)
只要对集合进行了排序,您就可以简单地使用
data[1]
col\u pal[1]
将它们成对地关联起来。或者,您可以创建一个成对和颜色的列表,具体取决于您选择如何将它们替换到函数中

或者您可以使用
colorRampPalette
创建渐变

map_colors<-colorRampPalette(viridis(12)) # this would create 12 viridis colors

map\u colors我想这正是您想要的。大部分内容都是从
viridis
函数的源代码复制而来的。它接受介于0和1之间的值,并返回一种颜色,以及沿viridis映射的相应部分

get_viridis_color <- function(x, opt="D", begin=0, end=1, reverse=FALSE) {
    x <- x * (end - begin) + begin
    cmap <- viridisLite::viridis.map[viridisLite::viridis.map$opt == opt,]
    if (reverse) cmap <- cmap[rev(seq_len(nrow(cmap))),]
    map_rgbs <- grDevices::rgb(cmap$R, cmap$G, cmap$B)
    ramp <- grDevices::colorRamp(map_rgbs, space="Lab", interpolate="spline")
    out_rgbs <- ramp(x) / 255
    grDevices::rgb(out_rgbs[,1], out_rgbs[,2], out_rgbs[,3])
}
get_viridis_color您可以使用(2018年10月1日的CRAN)为值指定颜色。默认调色板为viridis

number_vector <- c(0.772, 1.235, 5.78, 8.890, 10.543, 14.702)

colourvalues::colour_values(number_vector)
# [1] "#440154FF" "#470E60FF" "#2E6E8EFF" "#20A486FF" "#44BF70FF" "#FDE725FF"

number\u vector您看到
begin
end
参数了吗?例如,使用
scale\u fill\u viridis(option=“C”,begin=.2,end=.9)
。您想要一个函数随机选择这些值吗?谢谢@stackTon,我上面的编辑可能会让问题更清楚
number_vector <- c(0.772, 1.235, 5.78, 8.890, 10.543, 14.702)

colourvalues::colour_values(number_vector)
# [1] "#440154FF" "#470E60FF" "#2E6E8EFF" "#20A486FF" "#44BF70FF" "#FDE725FF"