Как установить цветовую палитру Seaborn для нескольких категорий? - PullRequest
0 голосов
/ 14 мая 2019

Я передаю кадр данных pandas для построения с pd.scatterplot и хочу использовать цветовую палитру 'bright'.Цвет должен определяться значениями в целочисленной серии I, которые передаются функции построения в виде hue.

Проблема заключается в том, что это работает только тогда, когда в серии hue есть только два различных значения.Если в нем только одна или более двух разных значений, для графика по умолчанию используется цветовая палитра бежево-фиолетового цвета.

При настройке цветовой палитры с помощью sns.set_palette('bright') все происходит, как описано выше.Но когда я выполняю palette='bright' внутри вызова функции построения графиков ( и n_classes равен! = 2 ), я получаю явную ошибку Value:

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

Для второго метода просто измените вызов scatterplot на

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

Есть ли способ получить несколько уровней оттенков в нужной палитре?Я что-то не так делаю или это ошибка?

1 Ответ

1 голос
/ 15 мая 2019

Вам нужно передать количество цветов

Как-то так.

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