【问题标题】:seaborn husl or hsl color palette is not working: remains default black and white colorsseaborn husl 或 hsl 调色板不起作用:仍然是默认的黑白颜色
【发布时间】:2015-03-06 04:54:41
【问题描述】:

我需要一个圆形颜色图,遇到了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

【问题讨论】:

    标签: python matplotlib hsl seaborn


    【解决方案1】:

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

    这里你只是在制作一个有 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()
    

    【讨论】:

    • seaborn color_palette() 可以调用 entryexit 作为上下文工作,那么呢?可能包含mpl.rcParams["image.cmap"] 但目前不包含的上下文? (很棒的演示。具有讽刺意味的是,离散颜色条对我挑选数据特征很有用。)
    • 是的,您当然可以使用上下文管理器设置默认 cmap —— 最容易使用 matplotlib rc_context 函数,尽管您也可以使用 seaborn axes_style 颜色管理器,如image.cmap 是在那里定义的——但是 seaborn 调色板和颜色图是具有不同目的的对象,所以在 color_palette 中这样做是没有意义的。
    • 另外,由于 imshow 采用 cmap kwarg,使用上下文管理器而不是直接将颜色图传递给函数过于复杂,因此不是 Python 的。
    • 我不知道rc_context!很棒。
    【解决方案2】:
    seamap = mpl.colors.ListedColormap(sns.color_palette("husl"))
    
    imshow(im,cmap=seamap)
    

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

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 2022-12-11
      • 2017-11-04
      • 2021-09-16
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      相关资源
      最近更新 更多