Matplotlib en Python: guía de gráficos para principiantes

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
Logo do matplotlib em um fundo branco

Matplotlib en Python es una de las bibliotecas más utilizadas para crear gráficos y figuras científicas. Permite generar líneas, barras, diagramas de dispersión, histogramas, gráficos circulares, paneles con varias figuras y archivos preparados para informes o publicaciones.

Esta guía explica el modelo de figuras y ejes, la personalización de títulos y leyendas, la integración con Pandas, la creación de subplots y la exportación de imágenes. Para visualizaciones interactivas con zoom y etiquetas emergentes, consulta también la guía de Plotly en Python.

Qué es Matplotlib

Matplotlib es una biblioteca de código abierto orientada principalmente a gráficos estáticos. Su interfaz más conocida es matplotlib.pyplot, importada normalmente como plt. La guía oficial de Matplotlib contiene tutoriales y referencias, mientras que la galería oficial de ejemplos muestra figuras completas con su código.

Instalar Matplotlib

Trabaja dentro de un entorno virtual, como se explica en la guía de venv en Python:

python -m pip install matplotlib

Comprueba la instalación:

import matplotlib

print(matplotlib.__version__)

Cuando un editor no encuentra el paquete, revisa que use el mismo intérprete donde ejecutaste pip.

Crear el primer gráfico de líneas

import matplotlib.pyplot as plt

meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun"]
ventas = [120, 145, 138, 170, 190, 205]

plt.plot(meses, ventas)
plt.title("Ventas mensuales")
plt.xlabel("Mes")
plt.ylabel("Unidades")
plt.show()

plot() añade la serie y show() muestra la figura. Todo gráfico debe incluir suficiente contexto para que el lector entienda variables y unidades.

Comprender Figure y Axes

La interfaz orientada a objetos resulta más mantenible:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(meses, ventas)
ax.set_title("Ventas mensuales")
ax.set_xlabel("Mes")
ax.set_ylabel("Unidades")
plt.show()

La Figure es el lienzo completo. Un Axes es una zona de dibujo dentro de la figura. Una Figure puede contener uno o varios Axes organizados como subplots.

Añadir marcadores, estilos y cuadrícula

fig, ax = plt.subplots()
ax.plot(
    meses,
    ventas,
    marker="o",
    linestyle="--",
    linewidth=2,
    label="Ventas",
)
ax.set_title("Ventas mensuales")
ax.set_xlabel("Mes")
ax.set_ylabel("Unidades")
ax.grid(True, alpha=0.3)
ax.legend()
plt.show()

Utiliza estilos para distinguir información, no como decoración excesiva. Una cuadrícula sutil ayuda a estimar valores; una cuadrícula intensa compite con los datos.

Comparar varias series

online = [90, 100, 105, 125, 142, 150]
tienda = [60, 63, 58, 70, 74, 82]

fig, ax = plt.subplots()
ax.plot(meses, online, marker="o", label="Online")
ax.plot(meses, tienda, marker="s", label="Tienda")
ax.set_title("Ventas por canal")
ax.set_xlabel("Mes")
ax.set_ylabel("Unidades")
ax.legend()
plt.show()

Cada serie necesita una etiqueta clara. Si una figura acumula demasiadas líneas, divide el análisis en paneles o resume los datos.

Gráfico de barras

productos = ["Portátil", "Ratón", "Teclado", "Monitor"]
unidades = [35, 110, 78, 52]

fig, ax = plt.subplots()
ax.bar(productos, unidades)
ax.set_title("Unidades por producto")
ax.set_xlabel("Producto")
ax.set_ylabel("Unidades")
plt.show()

Las barras comparan categorías. El eje numérico normalmente debe comenzar en cero, porque la longitud de la barra representa magnitud.

Barras agrupadas

import numpy as np
import matplotlib.pyplot as plt

productos = ["Portátil", "Ratón", "Teclado"]
t1 = [30, 95, 70]
t2 = [38, 112, 82]
posiciones = np.arange(len(productos))
ancho = 0.35

fig, ax = plt.subplots()
ax.bar(posiciones - ancho / 2, t1, ancho, label="T1")
ax.bar(posiciones + ancho / 2, t2, ancho, label="T2")
ax.set_xticks(posiciones, productos)
ax.set_ylabel("Unidades")
ax.set_title("Ventas por trimestre")
ax.legend()
plt.show()

NumPy genera posiciones consistentes. La guía de NumPy para principiantes explica arrays y operaciones numéricas.

Diagrama de dispersión

horas = [2, 3, 4, 5, 6, 7, 8, 9]
notas = [55, 61, 65, 72, 78, 82, 88, 93]

fig, ax = plt.subplots()
ax.scatter(horas, notas)
ax.set_title("Horas de estudio y notas")
ax.set_xlabel("Horas")
ax.set_ylabel("Nota")
plt.show()

La dispersión ayuda a observar relaciones, grupos y valores atípicos. Una tendencia visible no demuestra causalidad.

Histograma

notas = [52, 61, 67, 71, 73, 74, 78, 82, 85, 85, 89, 92, 95]

fig, ax = plt.subplots()
ax.hist(notas, bins=5, edgecolor="black")
ax.set_title("Distribución de notas")
ax.set_xlabel("Nota")
ax.set_ylabel("Frecuencia")
plt.show()

La cantidad y los límites de los intervalos cambian la forma aparente. Prueba opciones razonables y no elijas bins para favorecer una conclusión.

Gráfico circular con moderación

etiquetas = ["Web", "Móvil", "Escritorio"]
valores = [55, 30, 15]

fig, ax = plt.subplots()
ax.pie(
    valores,
    labels=etiquetas,
    autopct="%1.0f%%",
    startangle=90,
)
ax.set_title("Tráfico por plataforma")
ax.axis("equal")
plt.show()

Los gráficos circulares funcionan mejor con pocas proporciones claramente diferentes. Para comparaciones precisas, utiliza barras.

Añadir anotaciones

fig, ax = plt.subplots()
ax.plot(meses, ventas, marker="o")

indice = ventas.index(max(ventas))
ax.annotate(
    "Valor máximo",
    xy=(meses[indice], ventas[indice]),
    xytext=(-60, -35),
    textcoords="offset points",
    arrowprops={"arrowstyle": "->"},
)
plt.show()

Las anotaciones deben destacar eventos importantes, no etiquetar cada punto de forma innecesaria.

Crear subplots

fig, ejes = plt.subplots(1, 2, figsize=(11, 4))

ejes[0].plot(meses, ventas, marker="o")
ejes[0].set_title("Ventas mensuales")

ejes[1].bar(productos, unidades)
ejes[1].set_title("Ventas por producto")
ejes[1].tick_params(axis="x", rotation=30)

fig.tight_layout()
plt.show()

figsize controla las dimensiones y tight_layout() reduce solapamientos. Cada subplot es un Axes independiente.

Trabajar con Pandas

import pandas as pd
import matplotlib.pyplot as plt

datos = pd.DataFrame({
    "mes": ["Ene", "Feb", "Mar", "Abr"],
    "ventas": [120, 145, 138, 170],
    "gastos": [75, 83, 80, 95],
})

ax = datos.plot(
    x="mes",
    y=["ventas", "gastos"],
    marker="o",
)
ax.set_title("Ventas y gastos")
ax.set_ylabel("Importe")
plt.show()

La guía de Pandas en Python cubre DataFrames, filtros y valores ausentes. Valida tipos antes de graficar, porque números guardados como texto producen ejes incorrectos.

Guardar una figura

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(meses, ventas, marker="o")
ax.set_title("Ventas mensuales")
ax.set_xlabel("Mes")
ax.set_ylabel("Unidades")

fig.savefig(
    "ventas-mensuales.png",
    dpi=300,
    bbox_inches="tight",
)

Guarda antes de llamar a show(). Matplotlib también exporta PDF y SVG cambiando la extensión. En procesos que crean muchas figuras, libera recursos:

fig.savefig("grafico.png", dpi=200)
plt.close(fig)

Convertir código repetido en función

import matplotlib.pyplot as plt


def crear_linea(x, y, titulo, destino):
    fig, ax = plt.subplots(figsize=(9, 5))
    ax.plot(x, y, marker="o")
    ax.set_title(titulo)
    ax.grid(True, alpha=0.3)
    fig.tight_layout()
    fig.savefig(destino, dpi=200)
    plt.close(fig)

Las funciones hacen que la generación sea coherente. La guía de docstrings en Python muestra cómo documentarlas.

Errores frecuentes

  • Olvidar show() en un script interactivo.
  • Guardar después de que el entorno haya limpiado la figura.
  • Usar series X e Y con longitudes diferentes.
  • Crear etiquetas ilegibles.
  • Combinar demasiados colores, marcadores y estilos.
  • Depender del estado global de pyplot en código reutilizable.
  • No cerrar figuras en un proceso por lotes.

Matplotlib o Plotly

Elige Matplotlib para figuras estáticas, informes impresos, exportación vectorial y control preciso. Elige Plotly cuando el público necesite interacción, zoom y valores emergentes. Un mismo proyecto puede usar ambos sin conflicto.

Conclusión

Matplotlib en Python ofrece una base sólida para visualizar datos. Aprende el modelo Figure/Axes, etiqueta cada gráfico, elige un tipo adecuado para la pregunta y exporta con dimensiones y resolución correctas. Después de dominar estos patrones, la galería oficial resulta una fuente útil para personalizaciones avanzadas.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Visualização de dados com Plotly em Python
    Ciencia de Datos
    Foto de perfil de Leandro Hirt da Academify

    Plotly en Python: gráficos interactivos paso a paso

    Aprende Plotly en Python para crear gráficos interactivos de líneas, barras y dispersión, personalizar figuras, usar Pandas y exportar resultados.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Mesa de trabalho com laptop exibindo gráficos e a logo do Pandas em primeiro plano
    Ciencia de Datos
    Foto de perfil de Leandro Hirt da Academify

    Pandas en Python: guía completa para principiantes

    Aprende Pandas en Python: Series, DataFrames, CSV, Excel, selección, filtros, valores ausentes, agrupaciones, merges y exportación.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026