如何将调色板 (n=5) 与第二个调色板 (n=4) 加上矩阵中的亮度变量 (n=4) 最佳混合(总共 5*4*4=80 种颜色)

Posted

技术标签:

【中文标题】如何将调色板 (n=5) 与第二个调色板 (n=4) 加上矩阵中的亮度变量 (n=4) 最佳混合(总共 5*4*4=80 种颜色)【英文标题】:How to mix optimally a color palette (n=5) with a second color palette (n=4) plus a luminance variable (n=4) in a matrix (total 5*4*4=80 colors) 【发布时间】:2022-01-04 02:27:45 【问题描述】:

使用 R,是否有办法将红色调色板(n=5 级)与橙色调色板(n=4 级)混合,并根据亮度混合每种 5x4 生成的颜色(或透明度/不透明度)变量(n=4 级),使 5x4x4=80 种颜色彼此最佳区分(即均匀分布),然后得到对应颜色的十六进制代码?

下面是要混合的颜色/亮度矩阵的 Excel 概览。

非常感谢

【问题讨论】:

你可以平均rgb值col <- rgb(t(rowMeans(col2rgb(c('red', 'blue')))) / 255, maxColorValue = 1, alpha = 0:3 / 3); image(t(1:4), col = col) 谢谢你,这是一个有趣的方法。尽管我没有找到合适的方法/功能来均匀混合红色和橙色调色板(我一个一个地寻找最好的混合,感谢优秀的网站trycolors.com/custom),我使用样本图调整了 4 个对比度级别colorspace 包中的函数(变暗选项),如我自己的答案中所述。 【参考方案1】:

我没有找到合适的方式/功能来均匀混合红色和橙色调色板。因此,感谢优秀的网站trycolors.com/custom),我一一寻找最好的混音。然后,我使用 colorspace 包中的 swatchplot 函数(变暗选项)调整了 4 个对比度级别,如下所示:

# select your gradient colors (hexadecimal codes) and optimize them: https://trycolors.com/custom/
library(colorspace)
# better visualization for comparison of color shades with this layout:
a0_hex <- c(
  "#ffffdd","#fdf3be","#ffea90","#fbdb7a",
  "#f9ceca","#fdc2ae","#ffa98a","#f99662",
  "#fb9991","#f58473","#ef6e44","#e56223",
  "#f15854","#ef3418","#dd3818","#cc3a01",
  "#d70303","#ca0303","#ba0808","#a60505")

# darken (or lighten) colors: https://colorspace.r-forge.r-project.org/reference/lighten.html
a1_dark <-
  swatchplot(
    "  0%" = a0_hex,
    " 10%" =  darken(a0_hex, 0.1),
    " 20%" =  darken(a0_hex, 0.2),
    " 30%" =  darken(a0_hex, 0.3),
    nrow = 4, off = c(0, 0))

a2_dark <- as.data.frame(a1_dark)
a2_dark

# rearrange the order of colors as required
library(tidyr)  # From long to wide table: https://mgimond.github.io/ES218/Week03b.html
a3_red_0 <- a2_dark %>% select(1:4) %>% pivot_longer(cols=1:4, names_to = "col", values_to = "hex")
a3_red_1 <- a2_dark %>% select(5:8) %>% pivot_longer(cols=1:4, names_to = "col", values_to = "hex")
a3_red_2 <- a2_dark %>% select(9:12) %>% pivot_longer(cols=1:4, names_to = "col", values_to = "hex")
a3_red_3 <- a2_dark %>% select(13:16) %>% pivot_longer(cols=1:4, names_to = "col", values_to = "hex")
a3_red_4 <- a2_dark %>% select(17:20) %>% pivot_longer(cols=1:4, names_to = "col", values_to = "hex")

# join and get all hex codes in one single column
a3_red_all <- rbind(a3_red_0, a3_red_1, a3_red_2, a3_red_3, a3_red_4) %>% select(!col)

# show the 5x4x4 = 80 colors
windows(200, 1800, pointsize = 12, xpos = 650, ypos = 25)
swatchplot(a3_red_all, nrow = 80, off = c(0, 0))

【讨论】:

以上是关于如何将调色板 (n=5) 与第二个调色板 (n=4) 加上矩阵中的亮度变量 (n=4) 最佳混合(总共 5*4*4=80 种颜色)的主要内容,如果未能解决你的问题,请参考以下文章

根据 mongodb 中第一个表的结果从第二个表加载数据

opencv学习——轨迹栏作为调色板

用滑动条做调色板

如何从 5-6-5 位图图像中提取调色板?

ECharts的高级使用(主题调色板颜色渐变)

如何将使用 pyplot.Spectral 创建的调色板用于循环中的散点图?