Python 如何从LinearSegmentedColormap获取所有颜色代码?
我正在使用seaborn制作彩色地图,并使用以下代码: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中获取所有颜色代码是一个笨拙的解决方案 这样做的目的是获得比颜色贴图中包含的颜色更多的颜色,然后将结果限制为唯
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]