Установить цвет Seaborn bar на основе значений, не включенных в график - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть pandas dataframe df со столбцами x (категориальный), y и z (оба с плавающей точкой).

Вот мой гистограмма.

sns.barplot(data=df, x=x, y=y)

Как настроить цветовую палитру для столбцов на основе значений столбца z?Я хотел бы установить палитру стилей Matplotlib как magma или RdYlBu.В основном, как установка аргумента hue, но со скалярной переменной.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Просто используйте аргумент palette, соответствующий переменной hue :

sns.barplot(data=df, x=x, y=y, hue=z, palette='magma')

Для демонстрации со случайными данными:

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

data_tools = ['sas', 'stata', 'spss', 'python', 'r', 'julia']

np.random.seed(11212018)
rand_df = pd.DataFrame({'GROUP': np.random.choice(data_tools, 500),
                        'INT': np.random.randint(1, 10, 500),
                        'NUM': np.random.randn(500),
                       })

fig, ax = plt.subplots(figsize=(15,5))
sns.barplot(data=rand_df, x='GROUP', y='NUM', hue='INT', palette='magma', ax=ax, ci=None)

plt.legend(bbox_to_anchor=(1,0.5), loc="center right",)
plt.show()

Plot Output

0 голосов
/ 04 декабря 2018

Я не уверен, есть ли способ сделать это в Сиборн.Но обычно использование matplotlib также работает напрямую.

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"x" : list("ABCDEFGH"),
                   "y" : [3,4,5,2,1,6,3,4],
                   "z" : [4,5,7,1,4,5,3,4]})

norm = plt.Normalize(df.z.min(), df.z.max())
cmap = plt.get_cmap("magma")

plt.bar(x="x", height="y", data=df, color=cmap(norm(df.z.values)))

plt.show()

enter image description here

Если ваш «категоричный» столбец содержит категории панд вместо простых строк, вы бысначала нужно его конвертировать, df["x"] = df["x"].astype(str).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...