Etiquetas en Matplotlib
Aprende a agregar y personalizar etiquetas de ejes, títulos, leyendas, marcas y anotaciones de texto en Matplotlib con ejemplos prácticos de Python.
Las etiquetas convierten un gráfico sin procesar en una historia legible. Este capítulo cubre todos los elementos principales de etiquetado en Matplotlib: etiquetas de ejes, títulos de gráficos, leyendas, etiquetas de marcas y anotaciones de texto. Para cada elemento verás la función esencial, sus parámetros más útiles y ejemplos prácticos que puedes ejecutar de inmediato.
Antes de comenzar, asegúrate de tener Matplotlib instalado. Consulta Matplotlib Getting Started para las instrucciones de configuración.
Configuración de etiquetas de ejes
Las funciones xlabel() e ylabel() añaden texto descriptivo a los ejes horizontal y vertical. Ambas aceptan los mismos parámetros.
import matplotlib.pyplot as plt
height = [63, 64, 65, 66, 67, 68, 69, 70, 71, 72]
weight = [127, 130, 133, 136, 139, 142, 145, 148, 151, 154]
plt.scatter(height, weight)
plt.xlabel('Height (inches)')
plt.ylabel('Weight (pounds)')
plt.show()Personalización del aspecto de las etiquetas
Ambas funciones aceptan un argumento fontsize (en puntos) y cualquier palabra clave de la clase Text de Matplotlib, como color, fontweight y fontstyle.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.xlabel('Time (seconds)', fontsize=13, color='steelblue', fontweight='bold')
plt.ylabel('Distance (meters)', fontsize=13, color='steelblue', fontweight='bold')
plt.show()Ajuste del espaciado de las etiquetas
Usa el parámetro labelpad para alejar una etiqueta de las marcas del eje — útil cuando las etiquetas de las marcas son largas o están rotadas.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1000, 2000, 3000, 4000, 5000]
plt.plot(x, y)
plt.xlabel('Quarter', labelpad=12)
plt.ylabel('Revenue ($)', labelpad=16)
plt.show()Agregar un título al gráfico
La función title() añade un título centrado encima del gráfico de forma predeterminada.
import matplotlib.pyplot as plt
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
sales = [25000, 30000, 45000, 35000, 50000, 60000,
70000, 80000, 90000, 100000, 110000, 120000]
plt.plot(months, sales)
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales ($)')
plt.show()Posición y estilo del título
Pasa loc ('left', 'center', 'right') para cambiar la alineación horizontal, y pad para controlar el espacio entre el título y la parte superior del gráfico.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 7, 2, 9, 4]
plt.plot(x, y, marker='o')
plt.title('Sensor Readings', loc='left', pad=14,
fontsize=15, fontweight='bold', color='darkslategray')
plt.show()Título a nivel de figura con suptitle()
Cuando una figura contiene múltiples subgráficos, usa suptitle() para añadir un título que abarque todos ellos. Los subgráficos individuales aún pueden tener su propio title().
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Product A')
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Product B')
fig.suptitle('Q1 Sales Comparison', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()tight_layout() evita que el título de la figura se superponga al contenido de los subgráficos. Consulta Matplotlib Subplots para un tratamiento completo de las figuras con múltiples paneles.
Personalización de la leyenda
Una leyenda identifica las series de datos en tu gráfico. Llama a legend() después de trazar las series.
Leyenda básica
Pasa una palabra clave label a cada llamada de trazado y luego llama a plt.legend() para renderizarla.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
plt.plot(x, [2, 4, 6, 8, 10], label='Series A')
plt.plot(x, [1, 3, 5, 7, 9], label='Series B')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Two Series')
plt.show()Ubicación de la leyenda
Pasa el parámetro loc para posicionar la leyenda con precisión. Valores comunes: 'upper left', 'upper right', 'lower left', 'lower right', 'center' o 'best' (Matplotlib elige la posición con menor solapamiento — el valor predeterminado).
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
plt.plot(x, [2, 4, 6, 8, 10], label='Revenue')
plt.plot(x, [1, 2, 3, 4, 5], label='Costs')
plt.legend(loc='upper left')
plt.show()Leyenda fuera de los ejes
Usa bbox_to_anchor junto con loc para colocar la leyenda fuera del área del gráfico. Llama a tight_layout() o ajusta subplots_adjust para que la leyenda no quede recortada.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
fig, ax = plt.subplots()
ax.plot(x, [1, 4, 9, 16], label='Quadratic')
ax.plot(x, [1, 8, 27, 64], label='Cubic')
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.tight_layout()
plt.show()Estilo de la leyenda
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
plt.plot(x, [2, 4, 6, 8, 10], label='Actual')
plt.plot(x, [1, 3, 5, 7, 9], label='Forecast', linestyle='--')
plt.legend(
title='Data',
fontsize=11,
title_fontsize=12,
framealpha=0.9,
edgecolor='gray',
)
plt.show()framealpha controla la opacidad del cuadro de la leyenda (0 = transparente, 1 = sólido). title agrega un encabezado dentro del cuadro de la leyenda.
Personalización de las etiquetas de marcas
Las etiquetas de marcas son los números o cadenas que Matplotlib imprime a lo largo de cada eje. Usa xticks() e yticks() para sobreescribirlas.
Rotación de etiquetas de marcas
Los nombres de categorías largos se superponen de forma predeterminada. Rótalos con el parámetro rotation.
import matplotlib.pyplot as plt
categories = ['January', 'February', 'March', 'April', 'May', 'June']
values = [12, 19, 14, 22, 18, 25]
plt.bar(categories, values)
plt.xticks(rotation=45, ha='right')
plt.ylabel('Units sold')
plt.title('Monthly Sales')
plt.tight_layout()
plt.show()ha='right' alinea el borde derecho de cada etiqueta con su marca correspondiente, lo que se ve más limpio después de la rotación.
Configuración de valores y etiquetas de marcas personalizados
Pasa dos listas a xticks(): las posiciones de las marcas y las cadenas a mostrar.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
ticks = [0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]
labels = ['0', 'π/2', 'π', '3π/2', '2π']
plt.xticks(ticks, labels, fontsize=12)
plt.ylabel('sin(x)')
plt.title('Sine Wave with Custom Tick Labels')
plt.show()Estilo de fuente de las etiquetas de marcas
Tanto xticks() como yticks() aceptan argumentos de palabra clave de fuente directamente.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 30, 25]
plt.plot(x, y)
plt.xticks(fontsize=12, color='steelblue')
plt.yticks(fontsize=12, color='steelblue')
plt.show()Agregar anotaciones de texto
La función text() coloca una cadena en una posición arbitraria dentro del sistema de coordenadas de los ejes.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 6, 5]
plt.plot(x, y, marker='o')
plt.text(3, 3.2, 'dip here', fontsize=11, color='crimson')
plt.title('Text Annotation Example')
plt.show()Los dos primeros argumentos son las coordenadas x e y en unidades de datos.
Anotación con flecha
annotate() dibuja una etiqueta más una flecha opcional que apunta a un punto de datos específico. Es la herramienta adecuada cuando deseas destacar valores atípicos o picos.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [4, 7, 2, 9, 3]
plt.plot(x, y, marker='o')
plt.annotate(
'Peak',
xy=(4, 9), # tip of the arrow (the data point)
xytext=(3.2, 9.5), # where the label sits
arrowprops=dict(arrowstyle='->', color='black'),
fontsize=12,
)
plt.title('Annotated Line Plot')
plt.show()API orientada a objetos: uso de métodos de Axes
Todas las funciones anteriores son envoltorios de conveniencia alrededor de los ejes activos actuales. Cuando trabajas con múltiples subgráficos — o cuando necesitas un control preciso — usa los métodos del objeto Axes directamente: ax.set_xlabel(), ax.set_ylabel(), ax.set_title(), ax.legend() y ax.set_xticks().
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
months = ['Jan', 'Feb', 'Mar', 'Apr']
revenue = [12000, 15000, 13000, 18000]
costs = [8000, 9000, 10000, 11000]
ax.plot(months, revenue, marker='o', label='Revenue')
ax.plot(months, costs, marker='s', label='Costs', linestyle='--')
ax.set_xlabel('Month', fontsize=12)
ax.set_ylabel('Amount ($)', fontsize=12)
ax.set_title('Revenue vs Costs — Q1', fontsize=14)
ax.legend(loc='upper left')
plt.tight_layout()
plt.show()Prefiere el estilo orientado a objetos cuando tu script crea más de un eje. Los atajos plt.* se dirigen a cualquiera que sea el eje activo en ese momento, lo que puede producir errores difíciles de rastrear en figuras con múltiples subgráficos.
Referencia rápida
| Objetivo | Función (pyplot) | Método (Axes) |
|---|---|---|
| Etiqueta del eje X | plt.xlabel() | ax.set_xlabel() |
| Etiqueta del eje Y | plt.ylabel() | ax.set_ylabel() |
| Título del gráfico | plt.title() | ax.set_title() |
| Título de la figura | plt.suptitle() | fig.suptitle() |
| Leyenda | plt.legend() | ax.legend() |
| Etiquetas de marcas X | plt.xticks() | ax.set_xticks() / ax.set_xticklabels() |
| Etiquetas de marcas Y | plt.yticks() | ax.set_yticks() / ax.set_yticklabels() |
| Texto libre | plt.text() | ax.text() |
| Anotar + flecha | plt.annotate() | ax.annotate() |
Capítulos relacionados
- Matplotlib Plotting — dibujar líneas y puntos
- Matplotlib Line — opciones de estilo y color de línea
- Matplotlib Markers — formas y tamaños de marcadores
- Matplotlib Grid — agregar líneas de cuadrícula a un gráfico
- Matplotlib Subplots — figuras con múltiples paneles