代码之家  ›  专栏  ›  技术社区  ›  elliot

我怎样才能找到R中两列颜色的平均值?

  •  1
  • elliot  · 技术社区  · 6 年前

    colorRampPalette() 功能和 purrr::map2() . 但是,这将返回一个列出的列,该列在未列出时与数据帧中的第一列相同。

    # Create a function for colors
    
    x <- RColorBrewer::brewer.pal(11, 'Spectral')
    
    spectral_col <- colorRampPalette(x)
    
    # Apply this function to 
    
    tibble(first = sample(spectral_col(100)),
           second = sample(spectral_col(100))) %>% 
      mutate(middle.color = map2(first, second, function(x, y){
        k <- colorRampPalette(c(x, y))
        k(1)
    
      })) 
    

    1 回复  |  直到 6 年前
        1
  •  5
  •   thelatemail    6 年前

    如果你只是生成一个长度的调色板 1 ,它总是第一个值。 如所示:

    colorRampPalette(c("#000000","#FFFFFF"))(1)
    #[1] "#000000"
    

    colorRampPalette(c("#000000","#FFFFFF"))(3)
    #[1] "#000000" "#7F7F7F" "#FFFFFF"
    colorRampPalette(c("#000000","#FFFFFF"))(3)[2]
    #[1] "#7F7F7F"
    

    你也可以用 colorRamp 如果要指定更精确的中点,可以选择:

    rgb(colorRamp(c("#000000","#FFFFFF"))(0.5), max=255)
    #[1] "#7F7F7F"
    

    purrr 功能:

    dat <- tibble(first = sample(spectral_col(100)),
           second = sample(spectral_col(100)))
    
    dat %>%
      mutate(middle=map2_chr(first,second, ~rgb(colorRamp(c(.x,.y))(0.5), max=255)))
    

    mapply :

    mapply(function(x,y) rgb(colorRamp(c(x,y))(0.5), max=255), dat$first, dat$second)