如何从 RGB 颜色列表构建 Seaborn 中的颜色映射?

4

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


1
你尝试过什么吗?我想在搜索类似“matplotlib自定义颜色映射”之类的东西后找到的任何解决方案都至少会让你有所启发。如果你遇到问题,询问特定的问题将更容易得到帮助。 - ImportanceOfBeingErnest
https://matplotlib.org/api/_as_gen/matplotlib.colors.ListedColormap.html - JohanC
你有机会尝试一下我回答中的解决方案了吗? - William Miller
1
@WilliamMiller 抱歉,我现在在做另一个项目。希望我能有机会在自己的时间里尝试一下。非常感谢。 - bob.sacamento
1个回答

9
构建一个matplotlib.colors.ListedColormap非常简单,只需使用tableau 20色板中的前4种颜色即可。以下是一个示例 -
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from matplotlib import cm

# Tableau 20 color palette for demonstration
colors = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
# Conversion to [0.0 - 1.0] from [0.0 - 255.0]
colors = [(e[0] / 255.0, e[1] / 255.0, e[2] / 255.0) for e in colors]

cmap = ListedColormap(colors)

a = np.outer(np.linspace(0, 1, 20), np.linspace(0, 1, 20))
im = plt.imshow(a, cmap=cmap)
plt.colorbar(im)
plt.show()

enter image description here

然而,如果您的颜色列表中没有渐变(如上例所示),则使用matplotlib.colors.LinearSegmentedColormap可能更有用。由于期望的格式,这会更加棘手,segmentdata参数是一个带有一组红色、绿色和蓝色条目的字典。每个条目应该是一个包含xy0y1元组的列表,形成表格中的行[...]。对于给定颜色表中的每一行都是xy0y1元组的序列。在每个序列中,x必须从0到1单调递增。对于落在x[i]x[i+1]之间的任何输入值z,给定颜色的输出值将在y1[i]y0[i+1]之间线性插值。
这样的字典可以通过下面示例中的方法进行算法生成。
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from matplotlib import cm

# Tableau 20 color palette for demonstration
colors = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
colors = [(e[0] / 255.0, e[1] / 255.0, e[2] / 255.0) for e in colors]

nc = len(colors)
c = np.zeros((3, nc, 3))
rgb = ['red', 'green', 'blue']
for idx, e in enumerate(colors):
    for ii in range(3):
        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)
plt.colorbar(im)
plt.show()

enter image description here

假设输入列表 colors 符合正确的 RGB 格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接