簡體   English   中英

seaborn husl或hsl調色板不起作用:保持默認的黑白顏色

[英]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)

顯示:

http://imgur.com/AC98hmp

另一個答案是(接近)正確的解決方案,但理解為什么會發生這種情況可能會有所幫助。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM