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

时间:2015-03-06 04:54:42

标签: python matplotlib hsl seaborn

我需要一个圆形颜色图,并遇到this answer,它描述了使用seaborn导入husl系统。我试图复制示例演示的简单用法,但我无法让我的图像显示颜色。它始终以黑白显示(seaborn默认调色板)。我在ipython工作,但不在ipython笔记本中。 (有些seaborn函数只在ipython笔记本中起作用 - 我需要一个不依赖它的答案。)特别是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

2 个答案:

答案 0 :(得分:9)

另一个答案是(接近)正确的解决方案,但理解为什么会发生这种情况可能会有所帮助。 sns.set_palette并在sns.color_palette语句中使用with控制matplotlib 颜色循环,(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()

enter image description here

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

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

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

enter image description here

您可能还想直接使用sns.husl_palette功能,这样您就可以控制循环的开始位置以及亮度和饱和度所用的级别:

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

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

enter image description here

答案 1 :(得分:4)

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

imshow(im,cmap=seamap)

enter image description here

链接的答案对我有用;显然imshow不是上下文意识和ax.plot是。