首页 > 解决方案 > 更感知统一的颜色图?

问题描述

在将科学数据绘制为灰度图像并应用假着色时,我提倡使用感知统一的颜色图。我不知道是谁发明了这些,但这些颜色图很棒,我不会使用其他任何东西。

无论如何,老实说,我对在许多流行的绘图软件(R-ggplot、python-matplotlib、matlab、JMP 等)中实现的 5 种颜色图(viridis、plasma、inferno、magma、cividis)有点厌烦.)。我相信你们中的一些人也有同样的单调感......

那么除了这 5 个颜色图之外,还有哪些其他在感知上是统一的颜色图?

奖励:是否有一些算法可以导出具有感知统一质量的颜色图(可能不是因为颜色感知具有心理方面)?但如果是这样,那是什么?

一些例子和参考: https://matplotlib.org/tutorials/colors/colormaps.html https://matplotlib.org/tutorials/colors/colormaps.html

https://www.youtube.com/watch?v=xAoljeRJ3lU

标签: pythonmatplotlibggplot2colorscolormap

解决方案


如果您关注此页面:http ://bids.github.io/colormap/ ,您将找到生产 Viridis、Magma、Inferno 和 Plasma 所需的所有详细信息。所有细节都太长,无法作为答案列举,但使用上述页面和viscm,您可以重新生成它们,并以交互方式重新生成它们。

或者,使用Color

import colour
import numpy as np

CAM16UCS = colour.convert(['#ff0000', '#00ff00'], 'Hexadecimal', 'CAM16UCS')
gradient = colour.utilities.lerp(
    CAM16UCS[0][np.newaxis],
    CAM16UCS[1][np.newaxis],
    np.linspace(0, 1, 20)[..., np.newaxis])
RGB = colour.convert(gradient, 'CAM16UCS', 'Output-Referred RGB')

colour.plotting.plot_multi_colour_swatches(
    [colour.plotting.ColourSwatch(RGB=np.clip(x, 0, 1)) for x in RGB])

print(colour.convert(RGB, 'Output-Referred RGB', 'Hexadecimal'))

['#fe0000' '#fb3209' '#f74811' '#f35918' '#ef671e' '#ea7423' '#e67f28'
 '#e18a2c' '#dc9430' '#d79e34' '#d1a738' '#cbb03b' '#c4b93d' '#bcc23e'
 '#b2cc3d' '#a6d53a' '#97df36' '#82e92e' '#62f321' '#00ff00']

哈巴狗

请注意,两种边界颜色以十六进制值给出,但您显然可以选择任何相关的颜色空间。同样,CAM16可以换成JzAzBz或类似的。

您可以使用此Google Colab notebook在线尝试。


推荐阅读