gpt4 book ai didi

python - 如何从 LinearSegmentedColormap 获取所有颜色代码?

转载 作者:行者123 更新时间:2023-12-05 06:51:25 25 4
gpt4 key购买 nike

我正在使用 seaborn 制作颜色图并使用以下代码:

import seaborn as sns

cmap = sns.color_palette("dark:#034694", as_cmap=True)

现在我想要这个 cmap 中所有颜色代码的列表,它的类型是 matplotlib.colors.LinearSegmentedColormap。我应该怎么做才能从变量 cmap 中获取所有颜色代码。

最佳答案

笨拙的解决方法

想法是获取比颜色图中包含的颜色更多的颜色,然后将结果限制为唯一颜色。

list(set([cmap(a) for a in np.linspace(0,1,1000)]))

更长的答案

调查 source我们可以看到LinearSegmentedColormap继承自Colormap,也就是说当我们执行类似cmap(0.5) 的操作时,Colormap__call__ 方法将被执行。

看这个方法:

    def __call__(self, X, alpha=None, bytes=False):

[...]

if not self._isinit:
self._init()

[...]

if bytes:
lut = (self._lut * 255).astype(np.uint8)
else:
lut = self._lut.copy() # Don't let alpha modify original _lut.

[...]

rgba = lut[xa]
if not np.iterable(X):
# Return a tuple if the input was a scalar
rgba = tuple(rgba)
return rgba
[omissions mine]

我们可以看到查找表self._lutself._init() 初始化,存储在lut 中并且可以选择缩放。

我找不到确切的 _init() 定义时间。

在任何情况下,我们都可以调用 _init() 然后访问查找表:

cmap = sns.color_palette("dark:#034694", as_cmap=True)
cmap._init()

rgbas = cmap._lut

然后按照您的评论中指出的那样转换为十六进制

hexes = [matplotlib.colors.rgb2hex(x) for x in rgbas]

关于python - 如何从 LinearSegmentedColormap 获取所有颜色代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66171467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com