首页 > 解决方案 > 如何为多个类别设置 seaborn 调色板?

问题描述

我正在传递一个要绘制的熊猫数据框,pd.scatterplot并且想要使用'bright'调色板。颜色将由我传递hue给绘图函数的整数系列中的值确定。

问题在于,这只适用于hueSeries 只有两个不同值的情况。当它只有一个或超过 2 个不同的值时,绘图默认为米色到紫色的调色板。

当使用一切设置调色板sns.set_palette('bright')时,如上所述。但是当我palette='bright'在绘图函数调用中进行操作时(并且 n_classes 是 != 2)我得到一个明确的值错误抛出:

ValueError: Palette {} not understood

这是重现的代码:

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

sns.set_palette('bright')        # first method

n_classes = 3

a = np.arange(10)
b = np.random.randn(10)
c = np.random.randint(n_classes, size=10)

s = pd.DataFrame({'A': a, 'B':b, 'C': c})

sns.scatterplot(data=s, x='A', y='B', hue='C')
plt.show()

对于第二种方法,只需将散点图调用更改为

sns.scatterplot(data=s, x='A', y='B', hue='C', palette='bright')

有没有办法在我想要的调色板中获得多个色调级别?我做错了什么还是这是一个错误?

标签: pythonpandasmatplotlibplotseaborn

解决方案


你需要传递颜色的数量

类似的东西。

sns.scatterplot(data=s,
                x='A',
                y='B',
                hue='C',
               palette=sns.color_palette('bright', s.C.unique().shape[0])
               )

推荐阅读