Primer gráfico con pyplot

Básico
Matplotlib
Matplotlib
Actualizado: 18/04/2026

El flujo básico con pyplot

La interfaz pyplot de Matplotlib proporciona una colección de funciones que hacen que Matplotlib funcione de manera similar a MATLAB. Es la forma más directa y rápida de crear gráficos en Python, especialmente útil para exploración de datos y prototipado rápido.

El flujo básico para crear cualquier gráfico con pyplot sigue siempre el mismo patrón:

  1. Importar la biblioteca
  2. Preparar los datos
  3. Trazar los datos
  4. Personalizar el gráfico (títulos, etiquetas, etc.)
  5. Mostrar o guardar el resultado
import matplotlib.pyplot as plt
import numpy as np

# 1. Preparar datos
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 2. Trazar
plt.plot(x, y)

# 3. Personalizar
plt.title('Mi primer gráfico')
plt.xlabel('Eje X')
plt.ylabel('Eje Y')

# 4. Mostrar
plt.show()

La función plot() en detalle

La función plt.plot() es la más utilizada en pyplot y acepta una gran variedad de argumentos para personalizar el aspecto de la línea trazada.

La sintaxis básica es: plt.plot(x, y, formato, **kwargs) donde el formato es una cadena de texto corta que combina color, marcador y estilo de línea.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

# Formato corto: color + marcador + estilo de línea
plt.plot(x, np.sin(x), 'b-')    # azul, línea sólida
plt.plot(x, np.cos(x), 'r--')   # rojo, línea discontinua
plt.plot(x, np.sin(x) * 0.5, 'go:')  # verde, círculos, punteado

plt.title('Diferentes formatos de línea')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(['sin(x)', 'cos(x)', '0.5·sin(x)'])
plt.show()

Los parámetros más usados de plt.plot() son:

| Parámetro | Descripción | Ejemplo | |-----------|-------------|---------| | color | Color de la línea | 'red', '#FF0000', (1,0,0) | | linewidth o lw | Grosor de la línea | 2.5 | | linestyle o ls | Estilo de la línea | '-', '--', ':', '-.' | | marker | Marcador en los puntos | 'o', 's', '^', '*' | | markersize o ms | Tamaño del marcador | 8 | | alpha | Transparencia (0=invisible, 1=sólido) | 0.7 | | label | Etiqueta para la leyenda | 'Serie A' |

x = np.linspace(0, 2 * np.pi, 50)

plt.plot(x, np.sin(x),
         color='steelblue',
         linewidth=2.5,
         linestyle='-',
         marker='o',
         markersize=5,
         alpha=0.8,
         label='Seno')

plt.plot(x, np.cos(x),
         color='coral',
         linewidth=2,
         linestyle='--',
         marker='s',
         markersize=4,
         label='Coseno')

plt.title('Funciones trigonométricas', fontsize=14)
plt.xlabel('Ángulo (radianes)', fontsize=11)
plt.ylabel('Valor', fontsize=11)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

Múltiples llamadas a plot() en la misma figura

Una de las ventajas de pyplot es que permite acumular múltiples llamadas de trazado sobre la misma figura antes de llamar a plt.show(). Cada llamada a plt.plot() añade una nueva serie al gráfico actual.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 4 * np.pi, 200)

# Tres llamadas sucesivas trazan en la misma figura
plt.plot(x, np.sin(x), label='sin(x)', color='blue')
plt.plot(x, np.sin(2 * x), label='sin(2x)', color='red', linestyle='--')
plt.plot(x, np.sin(x / 2), label='sin(x/2)', color='green', linestyle=':')

plt.title('Familia de funciones seno')
plt.xlabel('x')
plt.ylabel('Amplitud')
plt.legend(loc='upper right')
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()

Control del estado: plt.figure(), plt.clf() y plt.close()

Cuando se trabaja con múltiples gráficos en una misma sesión, es importante controlar qué figura está activa y cuándo limpiarla.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

# Crear una figura nueva explícitamente
plt.figure(figsize=(10, 4))
plt.plot(x, np.sin(x), 'b-')
plt.title('Primer gráfico')
plt.show()

# plt.clf() limpia la figura actual pero la mantiene abierta
plt.clf()

# Ahora podemos dibujar algo nuevo en la misma figura
plt.plot(x, np.cos(x), 'r-')
plt.title('Segundo gráfico (misma figura, limpiada)')
plt.show()

# plt.close() cierra completamente la figura
plt.close()

# plt.close('all') cierra todas las figuras abiertas
plt.close('all')

También puedes crear varias figuras con identificadores distintos:

# Figura 1
fig1 = plt.figure(1, figsize=(8, 4))
plt.plot([1, 2, 3], [1, 4, 9], 'bo-')
plt.title('Figura 1: Cuadrados')

# Figura 2 (sin mostrar la 1 todavía)
fig2 = plt.figure(2, figsize=(8, 4))
plt.plot([1, 2, 3], [1, 8, 27], 'rs-')
plt.title('Figura 2: Cubos')

# Mostrar ambas
plt.show()

Guardar el gráfico con savefig()

En lugar de mostrar el gráfico en pantalla con plt.show(), podemos guardarlo en disco con plt.savefig(). Esta función es especialmente útil en entornos de servidor o cuando se necesitan imágenes de alta calidad.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)
y = np.sin(x) * np.exp(-x / 10)

plt.figure(figsize=(10, 5))
plt.plot(x, y, color='darkcyan', linewidth=2)
plt.fill_between(x, y, alpha=0.2, color='cyan')
plt.title('Onda amortiguada', fontsize=14)
plt.xlabel('Tiempo (s)')
plt.ylabel('Amplitud')
plt.grid(True, alpha=0.3)

# Guardar en PNG con alta resolución
plt.savefig('onda_amortiguada.png', dpi=150, bbox_inches='tight')

# También en PDF (formato vectorial)
plt.savefig('onda_amortiguada.pdf', bbox_inches='tight')

print("Gráfico guardado correctamente.")
plt.show()

El parámetro bbox_inches='tight' recorta los márgenes blancos innecesarios alrededor del gráfico, muy recomendable para uso en documentos y presentaciones.

Uso de plt.grid() y plt.axhline() / plt.axvline()

Las líneas de cuadrícula y las líneas de referencia mejoran notablemente la legibilidad de los gráficos:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 200)
y = x ** 3 - 3 * x

plt.figure(figsize=(9, 5))
plt.plot(x, y, color='royalblue', linewidth=2, label='y = x³ - 3x')

# Línea horizontal en y=0 (eje X)
plt.axhline(y=0, color='black', linewidth=0.8, linestyle='-')

# Línea vertical en x=0 (eje Y)
plt.axvline(x=0, color='black', linewidth=0.8, linestyle='-')

# Línea horizontal de referencia
plt.axhline(y=2, color='red', linewidth=1, linestyle='--', alpha=0.7, label='y = 2')

# Cuadrícula
plt.grid(True, which='both', linestyle=':', alpha=0.4)

plt.title('Función cúbica con líneas de referencia')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.tight_layout()
plt.show()

Resumen del flujo con pyplot

El módulo pyplot mantiene internamente el concepto de figura y ejes activos. Cada función como plt.plot(), plt.title() o plt.xlabel() actúa sobre la figura/ejes activos en ese momento. Esto hace que el código sea conciso, pero puede generar confusiones en aplicaciones complejas. Para esos casos, la API orientada a objetos (con fig, ax = plt.subplots()) ofrece mayor control y claridad.

Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Matplotlib es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de Matplotlib

Explora más contenido relacionado con Matplotlib y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Crear un gráfico de líneas completo usando la interfaz pyplot. Entender el flujo de trabajo: crear datos → trazar → personalizar → mostrar. Usar plt.show(), plt.clf() y plt.close() correctamente. Añadir múltiples series en un mismo gráfico con pyplot. Guardar el primer gráfico con plt.savefig().