【问题标题】:seaborn color_palette as matplotlib colormapseaborn color_palette 作为 matplotlib 颜色图
【发布时间】:2016-06-18 23:11:48
【问题描述】:

Seaborn 提供了一个名为 color_palette 的函数,可让您轻松地为绘图创建新的 color_palette。

colors = ["#67E568","#257F27","#08420D","#FFF000","#FFB62B","#E56124","#E53E30","#7F2353","#F911FF","#9F8CA6"]

color_palette = sns.color_palette(colors)

我想将 color_palette 转换为可以在 matplotlib 中使用的 cmap,但我不知道该怎么做。

遗憾的是,只有像“cubehelix_palette”、“light_palette”这样的函数……有一个“as_cmap”参数。不幸的是,“color_palette”没有。

【问题讨论】:

    标签: python matplotlib plot seaborn


    【解决方案1】:

    您必须将 seaborn 调色板中的颜色列表转换为 matplolib 的颜色图(感谢@RafaelLopes 提出的更改):

    import seaborn as sns
    import matplotlib.pylab as plt
    import numpy as np
    from matplotlib.colors import ListedColormap
    
    # construct cmap
    flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
    my_cmap = ListedColormap(sns.color_palette(flatui).as_hex())
    
    N = 500
    data1 = np.random.randn(N)
    data2 = np.random.randn(N)
    colors = np.linspace(0,1,N)
    plt.scatter(data1, data2, c=colors, cmap=my_cmap)
    plt.colorbar()
    plt.show()
    

    【讨论】:

    • 纠正我,如果我错了,但这看起来不像将 seaborn color_palette 转换为 matplotlib cmap,这看起来像是如何使用 matplotlib 制作颜色图的替代解决方案。如果我从您的代码中删除 sns.set_palette(flatui) 没有任何变化。不过感谢您展示这个 matplotlib 功能。
    • 就功能而言,这是正确的答案,但请不要使用离散的颜色集来映射连续变化的数据,这是非常误导的。
    • 基于此答案@Corrumpo,您的代码使用cmap = ListedColormap(sns.color_palette().as_hex())
    • @RafaelLopes 感谢您的评论!这非常有用,几乎可以直接在 matplotlib 中使用每个 seaborn 调色板! :)
    • 请注意,此答案会从颜色列表中创建一个 matplotlib 颜色图。这里完全不需要使用seaborn,上面的代码完全可以不用seaborn。看来这个答案的原始版本实际上就是这样做的,使用my_cmap = ListedColormap(flatui)
    【解决方案2】:

    大多数生成调色板的 seaborn 方法都有一个可选参数 as_cmap,默认为 False。您可以使用直接获取 Matplotlib 颜色图:

    import seaborn as sns
    import matplotlib.pylab as plt
    import numpy as np
    
    # construct cmap
    my_cmap = sns.light_palette("Navy", as_cmap=True)
    
    N = 500
    data1 = np.random.randn(N)
    data2 = np.random.randn(N)
    colors = np.linspace(0,1,N)
    plt.scatter(data1, data2, c=colors, cmap=my_cmap)
    plt.colorbar()
    plt.show()
    

    【讨论】:

      【解决方案3】:

      第一个答案在某种程度上是正确的,但是太长了,包含很多不必要的信息。正确而简短的答案是:

      要将任何 sns.color_palette() 转换为与 matplotlib 兼容的 cmap,您需要两行代码

      from matplotlib.colors import ListedColormap
      cmap = ListedColormap(sns.color_palette())
      

      【讨论】:

      • 相反呢?是否有类似的代码可以将 [0.0, 'rgb(30, 136, 229)'], [0.01, 'rgb(30, 135, 228)'], ... 之类的 matplotlib 颜色图转换为与 seaborn 兼容的调色板?
      【解决方案4】:

      只是一个额外的提示 - 如果想要一个连续的颜色条/颜色图,添加 256 作为 Seaborn 颜色方案所需的颜色数量会很有帮助。

      cmap = ListedColormap(sns.color_palette("Spectral",256))   
      

      【讨论】:

        猜你喜欢
        • 2019-12-02
        • 1970-01-01
        • 2020-09-28
        • 2021-06-16
        • 2023-03-06
        • 2015-04-10
        • 1970-01-01
        • 2016-02-04
        • 1970-01-01
        相关资源
        最近更新 更多