13.4 Ajuste de etiquetas

El módulo adjustText que ajusta la etiqueta para tratar de evitar sobrelapamientos:

departamentos = (saber
    .groupby('estu_depto_reside', dropna=True)[['estu_inse_individual', 
        'punt_global']]
    .mean()
    .reset_index())
departamentos['estu_depto_reside'] = departamentos['estu_depto_reside'].str.title()
x = departamentos['estu_inse_individual'].to_numpy()
y = departamentos['punt_global'].to_numpy()
labels = departamentos['estu_depto_reside'].astype(str).to_numpy()
fig, ax = plt.subplots(figsize=(6,4))
_ = ax.scatter(x, y, s=20)
_ = ax.grid(True, color='0.9')
_ = ax.set_xlabel('Índice socioeconómico')
_ = ax.set_ylabel('Puntaje global')
_ = ax.set_title('Puntaje global en SABER11 según INSE por departamento')
# Añadir las etiquetas asocxiadas a cada punto
texts = [ax.text(xi, yi, lab,
                ha='left', va='center', fontsize=9,
                color = '0.15')
    for xi, yi, lab in zip (x, y, labels)]

Compárese. Mejora en algo.

departamentos = (saber
    .groupby('estu_depto_reside', dropna=True)[['estu_inse_individual', 
        'punt_global']]
    .mean()
    .reset_index())
departamentos['estu_depto_reside'] = departamentos['estu_depto_reside'].str.title()
x = departamentos['estu_inse_individual'].to_numpy()
y = departamentos['punt_global'].to_numpy()
labels = departamentos['estu_depto_reside'].astype(str).to_numpy()
fig, ax = plt.subplots(figsize=(6,4))
_ = ax.scatter(x, y, s=20)
_ = ax.grid(True, color='0.9')
_ = ax.set_xlabel('Índice socioeconómico')
_ = ax.set_ylabel('Puntaje global')
_ = ax.set_title('Puntaje global en SABER11 según INSE por departamento')
# Crear etiquetas en sus posiciones iniciales
texts = [ax.text(xi, yi, lab,
                ha='left', va='center', fontsize=9,
                color = '0.15')
    for xi, yi, lab in zip (x, y, labels)]
adjust_text(texts,
    x=x, y=y, ax = ax,
    only_move={'points': 'xy', 'text': 'xy'},
    expand_points=(1.15, 1.10),
    expand_text=(1.05, 1.10),
    arrowprops=dict(arrowstyle='-', color='0.2', lw=0.8))