13.1 Diagrama de barras para categorías

saber['fami_estratovivienda'] = saber['fami_estratovivienda'].cat.rename_categories({'Sin estrato': 'Rural'})
resumen_estrato = (
    saber['fami_estratovivienda']
      .value_counts(dropna=False, sort=False)
      .rename_axis('fami_estratovivienda')
      .reset_index(name='n')
)
resumen_estrato = resumen_estrato[resumen_estrato['fami_estratovivienda'].notna()].copy()
resumen_estrato['Porcentaje'] = resumen_estrato['n'] / resumen_estrato['n'].sum() * 100
fig, ax = plt.subplots(figsize=(7, 4))
ax.grid(True, axis='y', alpha=0.25, zorder = 0)
ax.bar(resumen_estrato['fami_estratovivienda'].astype(str),
    resumen_estrato['Porcentaje'],
    color='0.60',
    edgecolor='0.50',
    zorder = 3)
ax.set_xlabel('Estrato de la vivienda familiar')
ax.set_ylabel('Porcentaje')
ax.set_title('Distribución de los estudiantes según estrato de la vivienda')
ax.yaxis.set_major_formatter(PercentFormatter(xmax=100, decimals=0))
fig.text(0.85, 0, 'Fuente: ICFES', 
    ha='left', va='center', fontsize=9, style='italic', color='0.5')