R:从数值中获取十六进制颜色-如何定义渐变比例中的中点
我有一个数字向量,我想把它转换成十六进制颜色代码。颜色应该遵循从其可能的最小值(红色;0)、通过我定义的中值(平均值,黑色)到其可能的最大值(绿色;1)的梯度分布 对于ggplot,我将使用R:从数值中获取十六进制颜色-如何定义渐变比例中的中点,r,ggplot2,color-space,R,Ggplot2,Color Space,我有一个数字向量,我想把它转换成十六进制颜色代码。颜色应该遵循从其可能的最小值(红色;0)、通过我定义的中值(平均值,黑色)到其可能的最大值(绿色;1)的梯度分布 对于ggplot,我将使用scale.*\u gradientn函数。但是现在我需要实际的十六进制值,我正在努力计算它们 库(tidyverse) #>警告:包“dplyr”是在R版本3.6.2下构建的 数据a b颜色值 #> 1 0.2863037 0.9902960 #> 2 0.6169960 0.9527580 #> 3
scale.*\u gradientn
函数。但是现在我需要实际的十六进制值,我正在努力计算它们
库(tidyverse)
#>警告:包“dplyr”是在R版本3.6.2下构建的
数据a b颜色值
#> 1 0.2863037 0.9902960
#> 2 0.6169960 0.9527580
#> 3 0.3126825 0.8807853
#> 4 0.5464037 0.2307841
#> 5 0.5162976 0.8147066
#> 6 0.7519632 0.6821084
由(v0.3.0)于2020年2月17日创建
我在colorRamp
函数中遇到了这个问题,但是,它似乎没有提供任何定义手动“中点”的选项
我在colorspace
package上也看到了这一点,它允许定义中点。然而,我还是没有在ggplot之外应用它
谢谢你的提示 您可以在
ggplot
中获得跟随colorbar
渐变的十六进制值,如下所示:
gg_build()解决方案
set.seed(1)
data <- data.frame("a"=runif(100),"b"=runif(100))
mean_a <- mean(data$a)
p1 <- ggplot(data)+
geom_point(aes(x=a,
y=b,
color=a),
stat="identity")+
scale_color_gradientn(
colors=c("red","black","green"),
values=c(0, mean_a, 1))+
theme(legend.position = NULL)
# get plot build
build <- ggplot_build(p1)
# select hex value and x-value data
hex_df <- build$data[[1]][, c("colour", "x")]
# order hex value data to follow x-axis
hex_df_ordered <- hex_df[order(hex_df$x),]
此代码生成以下绘图:
结论
set.seed(1)
data <- data.frame("a"=runif(100),"b"=runif(100))
mean_a <- mean(data$a)
p1 <- ggplot(data)+
geom_point(aes(x=a,
y=b,
color=a),
stat="identity")+
scale_color_gradientn(
colors=c("red","black","green"),
values=c(0, mean_a, 1))+
theme(legend.position = NULL)
# get plot build
build <- ggplot_build(p1)
# select hex value and x-value data
hex_df <- build$data[[1]][, c("colour", "x")]
# order hex value data to follow x-axis
hex_df_ordered <- hex_df[order(hex_df$x),]
根据两个图的相似性判断,似乎您可以通过以下代码片段获得数值向量的十六进制值:
# create a palette function
pal <- scales::gradient_n_pal(colours = c("red","black","green"),values= c(0, mean_a, 1))
# get palette-generated values from your vector
data$hex_from_scales <- pal(data$a)
#创建调色板函数
非常感谢。这当然提供了我正在寻找的结果,但我正在寻找一种更直接的方法来计算十六进制值。每次我需要计算渐变颜色的十六进制值时,生成ggplot都是一个相当绕道的过程。特别是因为我需要不同绘图函数的十六进制值(在mapdeck中)。我在寻找一个函数,当使用scale\u color\u gradientn时,它实际执行ggplot的计算。@xiliam非常好。非常感谢,梯度法是我一直在寻找的。顺便说一句,我注意到当使用颜色而不是颜色时,gradient\u n\u pal函数不起作用。