seaborn husl 或 hsl 调色板不工作:保持默认的黑白颜色

seaborn husl or hsl color palette is not working: remains default black and white colors

我需要一个圆形颜色图,遇到了 this answer,它描述了使用 seaborn 导入 husl 系统。我试图复制示例演示的简单用法,但我无法让我的图像以彩色显示。它总是以黑白显示(seaborn 默认调色板)。我在 ipython 中工作,但不在 ipython 笔记本中工作。 (一些 seaborn 函数只在 ipython notebook 中工作——我需要一个不依赖于它的答案。)特别是 python 2.7.3,ipython 1.1.0.

MWE:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

fig = plt.figure()

im = np.random.random((100, 100))
with sns.color_palette("husl", 8):
    plt.imshow(im)

显示:

http://imgur.com/AC98hmp

seamap = mpl.colors.ListedColormap(sns.color_palette("husl"))

imshow(im,cmap=seamap)

链接的答案也适用于我;显然 imshow 不是上下文意识的, ax.plot 是。

另一个答案是(接近)正确的解决方案,但它可能有助于理解为什么会发生这种情况。 sns.set_palette 并在 with 语句中使用 sns.color_palette 控制 matplotlib color cycle, (mpl.rcParams["axes.color_cycle"]),用于设置绘图样式使用 plt.plot.

时的元素

相比之下,imshow有一个默认的colormap,这两者都是不同种类的对象(一个是颜色列表,另一个是连续映射从标量变量到颜色)并具有不同的默认设置(mpl.rcParams["image.cmap"])。

正如@cphlewis 指出的那样,您可以使用 sns.color_palette 返回的颜色列表来制作颜色图对象,但我不会那样做。你可以看到为什么如果你在图中添加一个颜色条:

import numpy as np
from scipy.ndimage import gaussian_filter
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

sns.set_style("dark")

img = np.random.normal(size=(100, 100))
img = gaussian_filter(img, 3, 2)

cmap1 = mpl.colors.ListedColormap(sns.color_palette("husl"))

plt.figure()
plt.imshow(img, cmap=cmap1)
plt.colorbar()

这里你只是制作了一个有 6 个唯一值的颜色图,这会导致你丢失数据中的大量高频信息。最好使用更多的颜色; 256 是一个很好的数字:

cmap2 = mpl.colors.ListedColormap(sns.color_palette("husl", 256))

plt.figure()
plt.imshow(img, cmap=cmap2)
plt.colorbar()

您可能还想直接使用 sns.husl_palette 函数,这样您就可以控制循环从哪里开始以及用于亮度和饱和度的级别:

cmap3 = mpl.colors.ListedColormap(sns.husl_palette(256, .33, .85, .6))

plt.figure()
plt.imshow(img, cmap=cmap3)
plt.colorbar()