首页 文章

在Seaborn中使用colormap作为调色板

提问于
浏览
1

这可能是对色彩映射与调色板的不同之处的误解,但我想使用seaborn中没有的色彩映射来为我的binned数据集着色 . 我尝试直接使用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()

1 回答

  • 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)
    

相关问题