Построение разноцветного графика плотности в Сиборне на основе условия - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь построить график плотности ядра, который меняет цвет в определенной точке.

У меня есть непрерывная переменная в диапазоне от -3 до 3, и я хочу, чтобы данные ниже 0 отображались в виде синей линииа заштрихованная область и выше 0 будет красной.Я попытался создать список или серию цветов, соответствующих каждой из точек в моих данных, но опция цвета kdeplot в Seaborn, похоже, не позволяет использовать массив.Я также попытался сгруппировать данные выше и ниже 0, но на этом графике показаны два явно раздельных распределения, где мне нужен только один.

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

sample = np.random.uniform(low=-3.0, high=3.0, size=(100,))
df = pd.DataFrame(sample, columns = ['scores'])

def plot_group(group):
    global ax
    c = 'b' if (group['scores'] < 0).all() else 'r'
    sns.kdeplot(group['scores'], color = c, shade = True)

colors = np.where(df['scores'] < 0, 'b', 'r')
df.groupby(colors).apply(plot_group)
sns.despine(top = True, right = True, left = True)
plt.setp(axes, yticks=[])

Я ожидаю одно непрерывное распределение, которое по-разному окрашивается вокруг нуля, но я получаю два отдельных графика. Вот неправильный вывод, который я генерирую

1 Ответ

0 голосов
/ 04 июня 2019

Я сделал нечто похожее с гистограммой, мне нужно было раскрасить столбец с наибольшим значением красным, это было сделано так.

import seaborn as sns

colors = ['grey' if (x < max(values)) else 'red' for x in values ]
sns.barplot(x=labels, y=values, palette=colors)
...