W3docs

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

ObjetivoFunción (pyplot)Método (Axes)
Etiqueta del eje Xplt.xlabel()ax.set_xlabel()
Etiqueta del eje Yplt.ylabel()ax.set_ylabel()
Título del gráficoplt.title()ax.set_title()
Título de la figuraplt.suptitle()fig.suptitle()
Leyendaplt.legend()ax.legend()
Etiquetas de marcas Xplt.xticks()ax.set_xticks() / ax.set_xticklabels()
Etiquetas de marcas Yplt.yticks()ax.set_yticks() / ax.set_yticklabels()
Texto libreplt.text()ax.text()
Anotar + flechaplt.annotate()ax.annotate()

Capítulos relacionados

Was this page helpful?