Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从LinearSegmentedColormap获取所有颜色代码?_Python_Matplotlib_Seaborn - Fatal编程技术网

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

Python 如何从LinearSegmentedColormap获取所有颜色代码?,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我正在使用seaborn制作彩色地图,并使用以下代码: import seaborn as sns cmap = sns.color_palette("dark:#034694", as_cmap=True) 现在我想要这个cmap中所有颜色代码的列表,它的类型是matplotlib.colors.LinearSegmentedColormap。如何从变量cmap中获取所有颜色代码是一个笨拙的解决方案 这样做的目的是获得比颜色贴图中包含的颜色更多的颜色,然后将结果限制为唯

我正在使用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)]))
更长的答案 调查 我们可以看到LinearSegmentedColormap继承自Colormap,这意味着 当我们执行类似于
cmap(0.5)
的操作时,将执行
\uuuu调用
Colormap
方法

看看这个方法:

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

我找不到定义
\u init()
的确切时间

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

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

rgbas = cmap._lut
然后转换为十六进制,正如您在评论中指出的那样

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

也许这个链接会有帮助:它提供了seaborn的所有颜色,如黑色、红色、蓝色等,而我想要的是我使用上述脚本创建的
cmap
变量的所有颜色代码。@Mr.T内部有一个定义了分辨率的查找表,但它是一个私有属性。如果您希望从
seaborn.color\u palette
中定义数量的离散十六进制颜色,通常不会将
添加为\u cmap=True
。这就是为什么我试图更好地理解问题的背景。你的意思是像前面提到的:
sns.color_调色板(“深色:”)。as_hex()
print(sns.color_调色板(“深色:”)。as_hex())
返回
[''23262d'、'1D2C4C41'、'163356'、'10396b'、'09407f'
,不确定您为什么认为这些是RGBA值。
cmap = sns.color_palette("dark:#034694", as_cmap=True)
cmap._init()

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