Python 如何在seaborn中从RGB颜色列表构建颜色贴图?

Python 如何在seaborn中从RGB颜色列表构建颜色贴图?,python,colors,seaborn,Python,Colors,Seaborn,我想从一个RGB颜色列表开始,并从中构建一个可以在seaborn绘图中使用的颜色贴图。我已经找到了一些关于如何更改默认颜色贴图的说明,但这不是我想要的。我想构造一个颜色映射,可以在kdeplot命令的cmap参数中使用。从颜色列表构造颜色映射相当简单。下面是使用tableau 20调色板中的前4种颜色的示例- 导入matplotlib.pyplot作为plt 从matplotlib.colors导入ListedColormap 从matplotlib导入cm #Tableau 20用于演示的调色

我想从一个RGB颜色列表开始,并从中构建一个可以在
seaborn
绘图中使用的颜色贴图。我已经找到了一些关于如何更改默认颜色贴图的说明,但这不是我想要的。我想构造一个颜色映射,可以在
kdeplot
命令的
cmap
参数中使用。

从颜色列表构造颜色映射相当简单。下面是使用tableau 20调色板中的前4种颜色的示例-

导入matplotlib.pyplot作为plt
从matplotlib.colors导入ListedColormap
从matplotlib导入cm
#Tableau 20用于演示的调色板
颜色=[(31119180),(174199232),(255127,14),(255187120)]
#从[0.0-255.0]转换为[0.0-1.0]
颜色=[(e[0]/255.0,e[1]/255.0,e[2]/255.0)表示颜色中的e]
cmap=列表颜色映射(颜色)
a=np.outer(np.linspace(0,1,20),np.linspace(0,1,20))
im=plt.imshow(a,cmap=cmap)
打印颜色条(im)
plt.show()

但是,如果颜色列表中没有渐变(如上所述),那么使用渐变可能更有用。由于预期的格式,这有点棘手

[…]
segmentdata
参数是一个包含一组红色、绿色和蓝色条目的字典。每个条目都应该是x、y0、y1元组的列表,形成表[…]中的行。
表中给定颜色的每一行都是x、y0、y1元组的序列。在每个序列中,x必须从0单调增加到1。对于介于
x[i]
x[i+1]
之间的任何输入值z,给定颜色的输出值将在
y1[i]
y0[i+1]
之间线性插值

这样的字典可以通过下面示例中的方法通过算法生成

导入matplotlib.pyplot作为plt
从matplotlib.colors导入LinearSegmentedColormap
从matplotlib导入cm
#Tableau 20用于演示的调色板
颜色=[(31119180),(174199232),(255127,14),(255187120)]
颜色=[(e[0]/255.0,e[1]/255.0,e[2]/255.0)表示颜色中的e]
nc=透镜(颜色)
c=np.零((3,nc,3))
rgb=[‘红色’、‘绿色’、‘蓝色’]
对于idx,枚举中的e(颜色):
对于范围(3)内的ii:
c[ii,idx,:]=[float(idx)/float(nc-1),e[ii],e[ii]]
cdict=dict(zip(rgb,c))
cmap=LinearSegmentedColormap('tab20',cdict)
a=np.outer(np.linspace(0,1,20),np.linspace(0,1,20))
im=plt.imshow(a,cmap=cmap)
打印颜色条(im)
plt.show()

假设输入列表
颜色
具有正确的RGB格式。

从颜色列表构造颜色是相当简单的。下面是使用tableau 20调色板中的前4种颜色的示例-

导入matplotlib.pyplot作为plt
从matplotlib.colors导入ListedColormap
从matplotlib导入cm
#Tableau 20用于演示的调色板
颜色=[(31119180),(174199232),(255127,14),(255187120)]
#从[0.0-255.0]转换为[0.0-1.0]
颜色=[(e[0]/255.0,e[1]/255.0,e[2]/255.0)表示颜色中的e]
cmap=列表颜色映射(颜色)
a=np.outer(np.linspace(0,1,20),np.linspace(0,1,20))
im=plt.imshow(a,cmap=cmap)
打印颜色条(im)
plt.show()

但是,如果颜色列表中没有渐变(如上所述),那么使用渐变可能更有用。由于预期的格式,这有点棘手

[…]
segmentdata
参数是一个包含一组红色、绿色和蓝色条目的字典。每个条目都应该是x、y0、y1元组的列表,形成表[…]中的行。
表中给定颜色的每一行都是x、y0、y1元组的序列。在每个序列中,x必须从0单调增加到1。对于介于
x[i]
x[i+1]
之间的任何输入值z,给定颜色的输出值将在
y1[i]
y0[i+1]
之间线性插值

这样的字典可以通过下面示例中的方法通过算法生成

导入matplotlib.pyplot作为plt
从matplotlib.colors导入LinearSegmentedColormap
从matplotlib导入cm
#Tableau 20用于演示的调色板
颜色=[(31119180),(174199232),(255127,14),(255187120)]
颜色=[(e[0]/255.0,e[1]/255.0,e[2]/255.0)表示颜色中的e]
nc=透镜(颜色)
c=np.零((3,nc,3))
rgb=[‘红色’、‘绿色’、‘蓝色’]
对于idx,枚举中的e(颜色):
对于范围(3)内的ii:
c[ii,idx,:]=[float(idx)/float(nc-1),e[ii],e[ii]]
cdict=dict(zip(rgb,c))
cmap=LinearSegmentedColormap('tab20',cdict)
a=np.outer(np.linspace(0,1,20),np.linspace(0,1,20))
im=plt.imshow(a,cmap=cmap)
打印颜色条(im)
plt.show()


假设输入列表
colors
具有正确的RGB格式。

您尝试过什么吗?我想,在搜索“matplotlib custom colormap”之类的内容后,您找到的任何解决方案都至少可以让您开始使用。如果你发现了问题,询问具体问题会更容易帮助你。你有机会在我的回答中尝试解决方案吗?@WilliamMiller对不起,我现在在另一个项目上。我希望我能很快有机会在自己的时间尝试一下。非常感谢。你试过什么吗?我想,在搜索“matplotlib custom colormap”之类的内容后,您找到的任何解决方案都至少可以让您开始使用。如果你发现了问题,询问具体问题会更容易帮助你。你有机会在我的回答中尝试解决方案吗?@WilliamMiller对不起,我现在在另一个项目上。我希望我能很快有机会在自己的时间尝试一下。非常感谢。