【问题标题】:Use a colormap as a palette in Seaborn在 Seaborn 中使用颜色图作为调色板
【发布时间】:2018-10-10 08:43:48
【问题描述】:

这可能是对颜色图与调色板有何不同的误解,但我想使用 seaborn 中不可用的颜色图为我的分箱数据集着色。我尝试使用 palettable,现在尤其是直接使用 cmocean,但会得到 TypeError;

'LinearSegmentedColormap' 对象不可迭代

使用 Seaborn 中可用的任何调色板都可以正常工作,但我需要一个不会变成白色的调色板,因为这会给情节添加一个奇怪的“条带”。

我有一个包含 3 列的数据框,其中包含数字数据、尺寸,并为图中的颜色使用添加了一个 bin 列。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import cmocean

cmap=cmocean.cm.balance
cpal=sns.color_palette(cmap,n_colors=64,desat=0.2)

plt.style.use("seaborn-dark")
ax = sns.stripplot(x='Data', y='Dimension', data=dfBalance, jitter=0.15, edgecolor='none', alpha=0.4, size=4, hue='bin', palette=cpal)
sns.despine()
ax.legend_.remove()
plt.show()

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    Seaborn 不会将Colormap 实例作为.color_palette 的输入。 It takes

    matplotlib cmap 的名称、[...] 或 matplotlib 接受的任何格式的颜色列表

    由于 cmocean 使用带有 "cmo." 前缀的 matplotlib 注册其颜色图,因此您可以这样做

    import seaborn as sns
    import cmocean
    
    cpal = sns.color_palette("cmo.balance", n_colors=64, desat=0.2)
    

    如果您有自己或从任何其他包创建的自定义颜色图,您可以自己注册。

    import seaborn as sns
    import matplotlib.cm
    import matplotlib.colors
    
    cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", ["brown", "pink", "limegreen"])
    matplotlib.cm.register_cmap("mycolormap", cmap)
    cpal = sns.color_palette("mycolormap", n_colors=64, desat=0.2)
    

    【讨论】:

    • 这似乎可行,但情节现在以某种方式变灰了?
    • 很不幸,但我手头的信息无法解决任何问题。不过,请随时提供问题的minimal reproducible example
    • 我已编辑问题以包含完整代码以生成包含的情节
    • 假设您想使用desat=1 而不是desat=0 来查看颜色?
    • 哇!愚蠢的我..会将帖子编辑回初始状态以避免混淆以供将来参考;)谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2017-11-04
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2020-12-16
    相关资源
    最近更新 更多