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

Python seaborn husl或hsl调色板不工作:保留默认的黑白颜色,python,matplotlib,hsl,seaborn,Python,Matplotlib,Hsl,Seaborn,我需要一个圆形的彩色地图,并偶然发现它描述了使用seaborn导入husl系统。我试图复制示例演示的简单用法,但我无法使图像以彩色显示。它始终以黑白显示(seaborn默认调色板)。我在ipython工作,但不是在ipython笔记本上。(一些seaborn函数只在ipython笔记本中工作——我需要一个不依赖于此的答案。)特别是python 2.7.3,ipython 1.1.0 MWE: 显示: 链接的答案也适用于我;显然,imshow没有上下文意识,ax.plot是 另一个答案是(接近

我需要一个圆形的彩色地图,并偶然发现它描述了使用seaborn导入husl系统。我试图复制示例演示的简单用法,但我无法使图像以彩色显示。它始终以黑白显示(seaborn默认调色板)。我在ipython工作,但不是在ipython笔记本上。(一些seaborn函数只在ipython笔记本中工作——我需要一个不依赖于此的答案。)特别是python 2.7.3,ipython 1.1.0

MWE:

显示:

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

另一个答案是(接近)正确的解决方案,但了解为什么会发生这种情况可能会有所帮助
sns.set_调色板
并在
with
语句中使用
sns.color调色板
控制matplotlib颜色循环(
mpl.rcParams[“axes.color_cycle”]
),使用
plt.plot
时用于设置打印元素的样式

相比之下,
imshow
有一个默认的colormap,它既是不同类型的对象(一个是颜色列表,另一个是从标量变量到颜色的连续映射),又有不同的默认设置(
mpl.rcParams[“image.cmap”]

正如@cphlewis所指出的,您可以使用
sns.color\u palete
返回的颜色列表来创建一个colormap对象,但我不会这样做。如果将颜色条添加到绘图中,您可以看到原因:

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个唯一值的colormap,这将导致您丢失数据中的大量高频信息。最好使用更多的颜色;256是个好数字:

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

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

您可能还希望直接使用
sns.husl\u调色板
功能,以便控制循环从何处开始,以及亮度和饱和度的使用级别:

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

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

seaborn
调色板()
可以调用entry和exit作为上下文,那么?可以包含
mpl.rcParams[“image.cmap”]
但当前不包含的上下文?(很好的演示。讽刺的是,离散色条对我挑选数据特征很有用。)是的,您当然可以使用上下文管理器设置默认的
cmap
——最容易使用matplotlib
rc_context
函数,不过您也可以使用seaborn
axes\u样式的
颜色管理器,正如
image.cmap
在这里定义的一样——但是seaborn调色板和颜色贴图是具有不同用途的对象,因此在
color\u调色板
中这样做是没有意义的。另外,由于
imshow
采用了
cmap
kwarg,使用上下文管理器而不是直接将颜色映射传递给函数过于复杂,因此不是pythonic。我不知道
rc\u context
!杰出的
cmap2 = mpl.colors.ListedColormap(sns.color_palette("husl", 256))

plt.figure()
plt.imshow(img, cmap=cmap2)
plt.colorbar()
cmap3 = mpl.colors.ListedColormap(sns.husl_palette(256, .33, .85, .6))

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