【问题标题】:How to construct a color map in seaborn from a list of RGB colors?如何从 RGB 颜色列表中构建 seaborn 中的颜色图?
【发布时间】:2020-04-27 12:19:00
【问题描述】:

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

【问题讨论】:

  • 你有什么尝试吗?我想您在搜索“matplotlib 自定义颜色图”之类的内容后找到的任何解决方案至少可以帮助您入门。如果您随后发现问题,询问具体问题会更容易提供帮助。
  • 您有机会尝试我回答中的解决方案吗?
  • @WilliamMiller 抱歉,我现在在做一个不同的项目。我希望我能有机会尽快尝试一下。非常感谢。

标签: python colors seaborn


【解决方案1】:

从颜色列表构造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()

但是,如果您在颜色列表中还没有渐变(因为上面没有),那么改用 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()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2016-08-19
    • 2018-05-07
    • 2017-11-04
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多