[英]seaborn husl or hsl color palette is not working: remains default black and white colors
我需要一个圆形的colormap,并且遇到了这个回答 ,它描述了使用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)
显示:
另一个答案是(接近)正确的解决方案,但理解为什么会发生这种情况可能会有所帮助。 sns.set_palette
并在with
语句中使用sns.color_palette
控制matplotlib 颜色循环 ( mpl.rcParams["axes.color_cycle"]
),用于在使用plt.plot
时设置绘图元素的plt.plot
。
相比之下, imshow
有一个默认的colormap ,它既是一种不同的对象(一种是颜色列表,另一种是从标量变量到颜色的连续映射),并且具有不同的默认设置( mpl.rcParams["image.cmap"]
)。
正如@cphlewis所说,你可以使用sns.color_palette
返回的颜色列表来制作一个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个唯一值的色彩图,这将导致您丢失数据中的大量高频信息。 最好使用更多颜色; 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()
seamap = mpl.colors.ListedColormap(sns.color_palette("husl"))
imshow(im,cmap=seamap)
相关的答案也适用于我; 显然imshow不是上下文意识和ax.plot是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.