Персонализируйте pandas boxplot с помощью цветов

#python #pandas #seaborn #boxplot

#python #pandas #сиборн #boxplot

Вопрос:

Я пытался создать boxplot из некоторых гендерных данных, которые я разделил на два разделенных фрейма данных, один для мужчин и один для женщин. Мне удалось сделать график в основном таким, каким я хотел, но теперь я хотел бы, чтобы он выглядел лучше. Я хотел бы сделать его похожим на график seaborn, но я не смог найти способ сделать это с помощью библиотеки seaborn. Я попробовал несколько идей, которые я нашел для раскрашивания pandas boxpplot, но ничего не сработало.

Есть ли способ раскрасить эти графики? Или есть способ сделать эти параллельные боковые графики с помощью seaborn?

 dados_generos = dados_sem_zeros[["NU_NOTA_CN","NU_NOTA_CH","NU_NOTA_MT","NU_NOTA_LC","NU_NOTA_REDACAO", "TP_SEXO"]]
sexo_f = dados_generos[dados_generos["TP_SEXO"].str.contains("F")]
sexo_m = dados_generos[dados_generos["TP_SEXO"].str.contains("M")]

labels = ["CN", "CH", "MT", "LC", "REDAÇÃO"]
    
fig, (ax, ax2) = plt.subplots(figsize = (10,7), ncols=2, sharey=True)

#Setting axis titles
ax.set_xlabel('Provas')
ax2.set_xlabel('Provas')
ax.set_ylabel('Notas')

#Making plots
chart1 = sexo_f[provas].boxplot(ax=ax)
chart2 = sexo_m[provas].boxplot(ax=ax2)

#Setting axis labels
chart1.set_xticklabels(labels,rotation=45)
chart2.set_xticklabels(labels,rotation=45)

plt.show()
  

Это результат, который я имею:

Параллельный boxplot использует библиотеку pandas

Это ссылка на данные, которые я использую: https://github.com/KarolDuarte/dados_generos/blob/main/dados_generos.csv

Ответ №1:

Поскольку он лучше всего подходит для данных длинной формы, давайте попробуем объединить данные и использовать. sns sns

 # melting the data
plot_data = df.melt('TP_SEXO')

fig, axes = plt.subplots(figsize = (10,7), ncols=2, sharey=True)

for ax, (gender, data) in zip(axes, plot_data.groupby('TP_SEXO')) :
    sns.boxplot(x='variable',y='value',data=data, ax=ax)
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо! Это сработало действительно хорошо! Я новичок и не очень хорошо использую .melt() , не могли бы вы подробнее рассказать о for цикле? есть две части, которые меня особенно смущают: 1) (gender, data) часть и 2) zip часть

2. zip удобно соединять элементы в нескольких итерациях (list, np.array, …) вместе. См., Например, Эту статью . Тем не менее, (gender, data) исходит из plot_data.groupby() того, что, как итерируемый, перебирает пару key, data_with_key . Пример смотрите В Этой статье .

3. Спасибо! Я думаю, что я получил хотя бы основы.