如何在seaborn中创建具有多个独特颜色的颜色映射

5

我希望您能够创建一个包含许多(数量达数百个)独特颜色的调色板。

以下是代码:

custom_palette = sns.color_palette("Paired", 12)
sns.palplot(custom_palette)

返回一个包含12种唯一颜色的调色板。
但是这段代码:

custom_palette = sns.color_palette("Paired", 24)
sns.palplot(custom_palette)

返回一个包含12种独特颜色,看起来重复两次的palplot。

我如何获得24种(或更多)独特的颜色?

3个回答

16

一定有办法得到你想要的!幸运的是,Seaborn有能力读取colorcet调色板,这些调色板提供了一些不错的选项,可以获得更广泛的定性颜色:

from sklearn.datasets import make_blobs
import colorcet as cc
import matplotlib.pyplot as plt
import seaborn as sns


blobs, labels = make_blobs(n_samples=1000, centers=25, center_box=(-100, 100))
palette = sns.color_palette(cc.glasbey, n_colors=25)

sns.scatterplot(x=blobs[:,0], y=blobs[:, 1], hue=labels, data=blobs, palette=palette)
plt.legend(ncol=5, bbox_to_anchor=(1, 1))
plt.show()

以下图表显示了25种不同颜色的结果:

输入图片描述

希望这可以帮助你!


2
“配对”调色板只有12种颜色,因此您不能拥有超过12种不同的颜色。
选择顺序调色板以获得超过12种颜色。
例如,“rocket”、“mako”或“viridis”:
custom_palette = sns.color_palette("viridis", 24)
sns.palplot(custom_palette)

https://seaborn.pydata.org/tutorial/color_palettes.html


"viridis"、"rocket"和"mako"都是连续的颜色映射。我正在寻找像"Paired"这样的定性颜色映射。 - Joanna
很遗憾,我认为在seaborn中没有超过12种不同颜色的定性调色板。 - djangoliv
要明确一点,在函数sns.color_palette("viridis", 24)中的数字的作用是从一个顺序颜色映射中创建一个任意长度(在此例中为24)的定性颜色映射。有关任意的详细信息,请参见mwaskom - undefined

2

我想你有几个选项。

使用循环色彩系统,您可以生成任意数量的不同色调。这些将是“有序”的,但您可以生成一个列表并对其进行排列,甚至在执行此操作之前通过变化亮度/饱和度值来组合多个生成的列表。

colorcet包括Glasbey colormaps,具有大量不同的色调,具有一定的亮度/饱和度变化和没有特定顺序。您可以使用任何注册其colormaps的软件包中的名称colormaps的引用;或者您可以生成一个列表并传递它。

* 这并不是完全正确的,原因有无聊的和有趣的两个。无聊的原因是,大多数显示器都是8位的,因此每个RGB控制点实际上只有256个不同的值。更有趣(也更麻烦)的原因是,人类感知不能仅因为它们具有不同的8位RGB值就区分颜色。所以你可以用大量的颜色制作一个绘图,但对于观察者来说它实际上并不会呈现出这样的效果。这个问题有多大取决于你的应用程序,但这是非常重要的一点需要谨记。


Glasbey调色板可能是最佳选择,"...[该算法]从允许的颜色空间中选择每个新颜色,使其在感知上与之前的所有颜色最不相似。" (https://colorcet.holoviz.org/user_guide/Categorical.html) - undefined

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