Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:从数值中获取十六进制颜色-如何定义渐变比例中的中点_R_Ggplot2_Color Space - Fatal编程技术网

R:从数值中获取十六进制颜色-如何定义渐变比例中的中点

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

我有一个数字向量,我想把它转换成十六进制颜色代码。颜色应该遵循从其可能的最小值(红色;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 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函数不起作用。