使用颜色个性化 pandas 箱线图
Personalize pandas boxplot with colors
我一直在尝试绘制一些性别数据的箱线图,我将这些数据分为两个数据框,一个用于男性,一个用于女性。
我设法基本上按照我想要的方式制作图表,但现在我想让它看起来更好。我想让它看起来像一个 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()
这是我得到的结果:
这是我正在使用的数据的 link:
https://github.com/KarolDuarte/dados_generos/blob/main/dados_generos.csv
由于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)
输出:
我一直在尝试绘制一些性别数据的箱线图,我将这些数据分为两个数据框,一个用于男性,一个用于女性。 我设法基本上按照我想要的方式制作图表,但现在我想让它看起来更好。我想让它看起来像一个 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()
这是我得到的结果:
这是我正在使用的数据的 link: https://github.com/KarolDuarte/dados_generos/blob/main/dados_generos.csv
由于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)
输出: