gpt4 book ai didi

r - 将值映射到 r 中的 viridis 颜色

转载 作者:行者123 更新时间:2023-12-04 20:03:00 27 4
gpt4 key购买 nike

如何在 r 中使用预定义的比例(如 library("viridis") 中的 viridis ?

问题不在于如何在 ggplot 中使用它,而是如何构建一个函数,我可以将指定值域内的任意值提供给并从中检索相应的颜色字符串(rgb、十六进制或任何其他输出格式)。
colorRampcolorRampPalette 似乎只在给定颜色空间内的 2 种颜色之间进行插值。但是,例如,我将如何使用 viridis 解决这个问题?

编辑:

感谢@sconfluentus 的回答,我编写了以下函数来执行我想要的操作(没有安全检查):

library("viridis")

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

map_viridis <- function(vec, num) {

vector_expanded <-round(vec, 1) * 10 # expand to allow for decimal precision
vector_exp_range <- max(vector_expanded) - min(vector_expanded)

colour_vector <- viridis(vector_exp_range + 1) # get vector of colour values for all possible decimals between min and max value
value_to_colour <- colour_vector[num * 10 - min(vector_expanded) + 1] # retrieve colour value for number

return(value_to_colour)

}

map_viridis(number_vector, 0.8) # returns "#440154FF"
map_viridis(number_vector, 3.4) # returns "#424086FF"
map_viridis(number_vector, 14.7) # returns "#FDE725FF"

只是想知道是否有更直接的方法来实现这个结果?

最佳答案

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

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_pal[1] 将它们成对关联……或者您可以根据您选择将它们替换到您的函数中的方式来创建对和颜色的列表。

或者你可以用 colorRampPalette 创建一个斜坡
map_colors<-colorRampPalette(viridis(12)) # this would create 12 viridis colors

关于r - 将值映射到 r 中的 viridis 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com