Построение сложной столбчатой диаграммы pandas
Есть датафрейм работников НИИ. У них есть параметры name, rating(0 - 700) и academic_degree(1-3). Нужно построить столбчатую диаграмму, по оси у rating, по х name, причём цвет столбца определяется параметром academic_degree.
Данные выглядят примерно так: https://drive.google.com/file/d/1Z1QlJslTtCtCMLEb0fwdx_4bfTJk17sj/view?usp=sharing
Ответы (2 шт):
Я был не прав, нужно использовать параметр palette. Ну и, чтобы всё уместилось, лучше имена писать по оси y. Цвета сами подберёте наиболее подходящие, я не дизайнер что-то совсем. Ну и по-хорошему легенду цветов хорошо бы написать где-то рядом.
import pandas as pd
import seaborn as sns
import matplotlib.pylab as plt
colors= {
'Нет': 'blue',
'к.м.н.': 'cyan',
'д.м.н.': 'magenta'
}
df = pd.read_csv('dataframe.csv', index_col=0)
plt.figure(figsize=(5,15))
sns.barplot(x='rating', y='name', palette=df.academic_degree.map(colors).values, data=df);
Ну и, возможно, чтобы лучше видно было различие в рейтинге, нужно указать ограничения на ось x:
plt.xlim(df.rating.min() - 1,df.rating.max() + 1);
Я не совсем уверен, что правильно понял, что вы хотите, но если речь о гистограмме, то можно сделать так:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("dataframe.csv", index_col=0)
fig, ax = plt.subplots(figsize=(10,5))
colors = {"Нет":"gray", "к.м.н.":"blue", "д.м.н.":"red"}
data = []
labels = []
for i in df["academic_degree"].unique():
data.append(df.loc[df["academic_degree"]==i, "rating"].values)
labels.append(i)
ax.hist(data, 10, alpha=0.75, label=labels)
ax.legend(prop={'size': 10})
fig.tight_layout()
plt.show()


