viridis与hcl.colors生成颜色存在差异的原因是什么?
问题解答:viridis系列函数的颜色差异是预期行为吗?
是的,这种细微颜色差异是预期行为,你对这些函数的误解主要源于对它们的实现基准、色彩模型的不同认知,具体差异原因如下:
1. viridis/viridisLite:原始RGB硬编码实现
viridis::viridis()和viridisLite::viridis()是直接复刻Matplotlib原生viridis调色板的固定RGB值集合,没有经过HCL色彩空间的转换或拟合。viridisLite是viridis包的轻量核心子集,所以两者输出完全一致,这和你的观察一致。
2. grDevices::hcl.colors:HCL空间拟合的viridis
R内置的grDevices::hcl.colors()中的palette = "viridis",并不是直接复用viridis包的RGB值,而是通过HCL色彩空间参数(色相、色度、亮度)重新拟合的版本。它的目标是匹配viridis调色板的视觉感知效果,但由于色彩空间转换和拟合逻辑的存在,生成的RGB值会和原始viridis有细微偏差。
3. colorspace::sequential_hcl:与hcl.colors同源的HCL实现
colorspace::sequential_hcl(9, "Viridis")和grDevices::hcl.colors()的viridis调色板是同源的——R的hcl.colors正是基于colorspace包的HCL色彩模型开发的,所以两者输出完全一致,都是HCL拟合后的结果,自然和原始viridis的RGB版本存在差异。
补充验证代码
可以用colorspace包查看不同调色板的色彩空间分布差异:
library(colorspace) # 对比原始viridis和HCL版viridis的色彩空间 specplot(list( viridis_original = viridis::viridis(9), viridis_hcl = hcl.colors(9, "viridis") ))
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

