在Seaborn中将颜色图用作调色板

时间:2018-10-10 08:43:48

标签: python matplotlib seaborn

这可能是一个误解,色彩映射表与调色板有何不同,但我想使用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()

1 个答案:

答案 0 :(得分:2)

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)