Saltar al contenido principal
InicioTutorialesVisualización de datos

Gráficos lineales en MatplotLib con Python

Este tutorial práctico profundiza en la creación y personalización de gráficos lineales con Matplotlib, una potente biblioteca de visualización de datos en Python.
Actualizado abr 2024  · 11 min leer

La visualización de datos y la narración de historias son vitales para los científicos de datos, ya que transforman las complejas perspectivas de los datos en narraciones convincentes y fáciles de digerir para una comunicación eficaz. Aunque se publican bibliotecas más nuevas y sofisticadas, Matplotlib sigue siendo una de las bibliotecas de gráficos más populares y sienta las bases de las más recientes.

Este tutorial se centra en uno de los tipos más comunes de gráficos de Matplotlib, el gráfico de líneas. Los gráficos de líneas son excelentes para mostrar las tendencias y fluctuaciones de los datos a lo largo del tiempo, conectando los puntos (literalmente) para pintar una imagen vívida de lo que está ocurriendo.

Este tutorial comienza con los aspectos básicos de la creación de un simple gráfico de líneas y luego pasa a técnicas más avanzadas, como añadir información estadística a los gráficos. Al final de este tutorial, tendrás una sólida comprensión de cómo crear diferentes tipos de gráficos lineales en Matplotlib y cómo utilizarlos para comunicar tus datos a los demás de manera eficaz.

¿Estás preparado para mejorar tus habilidades de visualización de datos? ¡Empecemos!

Las bibliotecas, los datos y el preprocesamiento

Antes de empezar a crear gráficos lineales con Matplotlib, debemos configurar nuestro entorno. Esto implica instalar Matplotlib, importar las bibliotecas necesarias y preprocesar el conjunto de datos que utilizaremos para nuestros ejemplos.

Instalación de matplotlib

Para instalar Matplotlib, puedes utilizar pip, el instalador de paquetes para Python. Solo tienes que abrir un terminal o símbolo del sistema y escribir:

pip install matplotlib

Esto instalará la última versión de Matplotlib en tu máquina.

Importación de las bibliotecas necesarias

Una vez instalado Matplotlib, debemos importarlo junto con otras bibliotecas necesarias, como NumPy y Pandas. NumPy es una biblioteca para trabajar con matrices, mientras que Pandas es para la manipulación y el análisis de datos.

Para importar estas bibliotecas, simplemente escribe el siguiente código:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

Lectura y tratamiento previo de los datos

Para este tutorial, utilizaremos un conjunto de datos que contiene los precios diarios del índice DJIA. El conjunto de datos incluye cinco columnas: 

  • La columna Date proporciona la fecha en la que se registró el resto de la información sobre cotizaciones bursátiles
  • Open, Close: El precio del DJIA en la apertura y cierre del mercado de valores de ese día concreto
  • High, Low: El precio máximo y mínimo que alcanzó el DJIA durante un día concreto

Después de cargar el conjunto de datos, haríamos algunos preprocesamientos básicos de los datos, como cambiar el nombre de la columna, convertirla en variable datetime y ordenar los datos en orden ascendente de fecha.

Aquí tienes el código de lo anterior:

# Load the dataset into a Pandas DataFrame
df = pd.read_csv("HistoricalPrices.csv")

# Rename the column to remove an additional space
df = df.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})

# Convert the date column to datetime
df['Date'] = pd.to_datetime(df['Date'])

# Sort the dataset in the ascending order of date
df = df.sort_values(by = 'Date')

Ahora que hemos configurado el entorno y cargado el conjunto de datos, podemos pasar a crear gráficos lineales utilizando Matplotlib.

Crear un gráfico lineal básico en Matplotlib

Empezaremos creando un gráfico lineal básico y luego lo personalizaremos para que tenga un aspecto más presentable e informativo.

Utilizar plt.plot() para crear un gráfico lineal

Para crear un gráfico de líneas, utilizaremos la función plt.plot(). Esta función toma dos parámetros: los valores del eje x y los valores del eje y. En nuestro caso, la columna fecha serán nuestros valores del eje x, mientras que la columna cierre serán nuestros valores del eje y. Aquí tienes el código:

# Extract the date and close price columns
dates = df['Date']
closing_price = df['Close']

# Create a line plot
plt.plot(dates, closing_price)

# Show the plot
plt.show()

Cuando ejecutes el código anterior, deberías ver un gráfico lineal básico de las acciones del DJIA. 

image7.png

Personalizar el gráfico lineal

Matplotlib nos presenta un montón de personalizaciones adicionales, que podemos utilizar según nuestras necesidades.

Ajustar el color de la línea

De forma predeterminada, la función plt.plot() traza una línea azul. Sin embargo, puedes cambiar el color de la línea pasando un parámetro color a la función. El parámetro color puede tomar una cadena que represente el nombre del color o un código hexadecimal. 

He aquí un ejemplo:

# Plot in Red colour
plt.plot(dates, closing_price, color='red')

# Show the plot
plt.show()

Este código trazará una línea roja en lugar de una azul, como se muestra a continuación:

image9.png

Gráfico lineal básico en rojo

Ajustar el ancho de línea

También puedes cambiar la anchura de la línea pasando un parámetro linewidth a la función plt.plot(). El parámetro linewidth toma un valor en coma flotante que representa la anchura de la línea. 

He aquí un ejemplo:

# Increasing the linewidth
plt.plot(dates, closing_price, linewidth=3)

# Show the plot
plt.show()

Este código trazará una línea con una anchura de 3 en lugar de la anchura predeterminada, como se muestra a continuación: 

image10.png

Líneas más gruesas en el gráfico debido a un mayor ancho de línea

Establecer el estilo de línea

Puedes cambiar el estilo de línea pasando un parámetro linestyle a la función plt.plot(). El parámetro linestyle toma una cadena que representa el estilo de línea. La documentación de matplotlib proporciona una extensa lista de estilos disponibles. 

image1.png

He aquí cómo se pueden utilizar en código:

# Individually plot lines in solid, dotted, dashed and dashdot

plt.plot(dates, closing_price, linestyle='solid') # Default line style
plt.plot(dates, closing_price, linestyle='dotted')
plt.plot(dates, closing_price, linestyle='dashed')
plt.plot(dates, closing_price, linestyle='dashdot')

# Show the plot
plt.show()

Añadir marcadores a los gráficos lineales

Se pueden utilizar marcadores para resaltar puntos concretos en el gráfico de líneas. Se pueden utilizar varios tipos de símbolos como marcadores y se pueden consultar en la documentación de matplotlib.

Aquí tienes un ejemplo de uso de marcadores en un gráfico lineal:

# Add a cross marker for each point
plt.plot(df['Date'], df['Close'], marker='x')

# Show the plot
plt.show()

En el código anterior, estamos utilizando marcadores cruzados (x) para resaltar los Close precios de las acciones del DJIA, como se muestra a continuación:

image6.png

Añadir etiquetas y título

Para que el gráfico sea más informativo, podemos añadir etiquetas a los ejes y un título. Podemos conseguirlo mediante las funciones plt.xlabel(), plt.ylabel() y plt.title(), respectivamente. 

He aquí un ejemplo:

plt.plot(dates, closing_price, color='red', linewidth=2)
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('DJIA Stock Price')

# Show the plot
plt.show()

Este código trazará una línea roja con una anchura de 2, con el eje x etiquetado como "Fecha", el eje y etiquetado como "Closing price" y el título "DJIA Stock Price". 

image5.png

Añadir líneas de cuadrícula

También podemos añadir líneas de cuadrícula a nuestro gráfico para hacerlo más legible. Podemos conseguirlo mediante la función plt.grid(). La función plt.grid() toma un valor booleano que representa si se debe mostrar la cuadrícula. 

He aquí un ejemplo: 

plt.plot(dates, closing_price, color='red', linewidth=2)
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('DJIA Stock Price')

# Add the grid
plt.grid(True)

# Show the plot
plt.show()

Verías cuadrículas añadidas al gráfico: 

image2.png

Gráficos de líneas Matplotlib con varias líneas

En algunos casos, puedes querer trazar varias líneas en el mismo gráfico. Para ello, puedes llamar varias veces a la función plt.plot() con datos diferentes en cada llamada. He aquí un ejemplo:

# Line plot of Open and Close prices

plt.plot(df['Date'], df['Open'])
plt.plot(df['Date'], df['Close'])
plt.title('DJIA Open and Close Prices')
plt.xlabel('Date')
plt.ylabel('Price')

plt.show()

En el código anterior, estamos trazando tanto el Open y Close de las acciones del DJIA en el mismo gráfico.

image4.png

Gráficos lineales Matplotlib con ejes gemelos

Puede darse el caso de que quieras representar dos variables con escalas diferentes en el mismo gráfico. En tales situaciones, utilizar ejes gemelos es una forma eficaz de visualizar la relación entre las variables sin perder la claridad de las escalas individuales. 

Para crear un gráfico de líneas con dos ejes, tenemos que utilizar la función twinx(). Esta función crea un nuevo eje y que comparte el mismo eje x que el gráfico original. 

Aquí tienes un ejemplo:

# Create a new variable for demonstration purposes
df['High_minus_Low'] = df['High'] - df['Low']

# Create a basic line plot for the Close prices
fig, ax1 = plt.subplots()
ax1.plot(df['Date'], df['Close'], color='blue', label='Close Price')
ax1.set_xlabel('Date')
ax1.set_ylabel('Closing Price', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')

# Create a twin axis for the High_minus_Low variable
ax2 = ax1.twinx()
ax2.plot(df['Date'], df['High_minus_Low'], color='green', label='High - Low')
ax2.set_ylabel('High minus Low', color='green')
ax2.tick_params(axis='y', labelcolor='green')

# Add a title and show the plot
plt.title('DJIA Stock Price and High-Low Difference with Twin Axes')
plt.show()

Y el gráfico resultante con dos ejes: 

image8.png

Añadir información estadística a los gráficos lineales de Matplotlib

Además de visualizar tendencias y patrones en los datos, los gráficos de líneas también pueden mostrar información estadística, como líneas de regresión y barras de error. 

Añadir una línea de regresión Matplotlib

Una recta de regresión es la que mejor se ajusta a los puntos de datos de un gráfico y puede utilizarse para modelizar y predecir valores futuros. Podemos añadir una recta de regresión a nuestro gráfico lineal utilizando la función polyfit() de la biblioteca NumPy, que ajusta una recta de regresión polinómica a nuestros puntos de datos. 

import matplotlib.dates as mdates

# Convert Date column to numeric value
df['Date'] = mdates.date2num(df['Date'])

# Add regression line to plot
coefficients_open = np.polyfit(df['Date'], df['Open'], 1)
p_open = np.poly1d(coefficients_open)

coefficients_close = np.polyfit(df['Date'], df['Close'], 1)
p_close = np.poly1d(coefficients_close)

fig, ax = plt.subplots()
ax.plot(df['Date'], df['Open'], '.', label='Open Price')
ax.plot(df['Date'], p_open(df['Date']), '-', label='Open Regression Line')
ax.plot(df['Date'], df['Close'], '.', label='Close Price')
ax.plot(df['Date'], p_close(df['Date']), '-', label='Close Regression Line')
ax.set_title('DIJA Stock Prices')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.legend()

# Format x-axis labels as dates
date_form = mdates.DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_form)
plt.gcf().autofmt_xdate()

plt.show()

En este código, primero convertimos las fechas en valores numéricos utilizando la función date2num() y después utilizamos la funciónpolyfit() para obtener los coeficientes de la recta de regresión. Para trazar la recta utilizamos la función poly1d(). Trazamos los puntos de datos originales mediante puntos y la línea de regresión mediante una línea continua. 

image11.png

Añadir barras de error

Las barras de error son una representación gráfica de la variabilidad de los datos y pueden utilizarse para indicar la incertidumbre de las mediciones.

Esto es especialmente útil cuando esperas que se produzcan algunos errores en el proceso de recogida de datos, como datos de temperatura, de calidad del aire, etc. Aunque estemos seguros de los precios de las acciones, vamos a suponer un error potencial de una desviación típica y a trazarlo utilizando la función errorbar de matplotlib.

# Calculate standard deviation of data
std = df['Close'].std()

# Add error bars to plot
plt.errorbar(df['Date'], df['Close'], yerr=std/2, fmt='.', label='Close Price')
plt.title('DIJA Stock Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

En este código, primero calculamos la desviación típica de los precios deClose en nuestro conjunto de datos. A continuación, utilizamos la función errorbar() para añadir barras de error al gráfico de líneas, con el tamaño de la barra de error fijado en la mitad de la desviación típica.

image3.png

Estas técnicas nos permiten añadir información estadística a nuestros gráficos lineales y profundizar en nuestros datos.

Conclusión

Los gráficos de líneas son una potente herramienta para visualizar tendencias y patrones en los datos, y Matplotlib proporciona una interfaz fácil de usar para crearlos. 

Como siguiente paso, quizá quieras seguir nuestro curso Intermedio de Python, en el que aplicarás todo lo que has aprendido a un caso práctico de estadísticas de hackers. 

Esperamos que este tutorial te haya ayudado a iniciarte en la creación de gráficos lineales en Matplotlib. También hemos tratado ampliamente los demás gráficos de Matplotlib en otro tutorial, que puede presentarte brevemente qué más puedes hacer con Matplotlib. 

¡Sigue explorando y experimentando con la creación de visualizaciones asombrosas y descubriendo perspectivas a partir de tus datos!

Temas
Relacionado

blog

Explorando 12 de las mejores herramientas de visualización de datos en 2023 con ejemplos

Existen muchas herramientas de visualización de datos. En este artículo, hemos preparado una lista exhaustiva de algunas de las herramientas de visualización de datos más útiles en la ciencia de datos.
Javier Canales Luna 's photo

Javier Canales Luna

17 min

tutorial

Programación orientada a objetos (POO) en Python: Tutorial

Aborda los fundamentos de la Programación Orientada a Objetos (POO) en Python: explora las clases, los objetos, los métodos de instancia, los atributos y ¡mucho más!
Théo Vanderheyden's photo

Théo Vanderheyden

12 min

tutorial

Cómo comentar un bloque de código en Python

Utilizar comentarios es fundamental para trabajar eficazmente con Python. En este breve tutorial, aprenderás a comentar un bloque de código en Python.
Adel Nehme's photo

Adel Nehme

3 min

tutorial

Guía completa de programación de sockets en Python

Aprende los fundamentos de la programación de sockets en Python
Serhii Orlivskyi's photo

Serhii Orlivskyi

41 min

tutorial

Tutorial de Python: Streamlit

Este tutorial sobre Streamlit está pensado para ayudar a los científicos de datos o ingenieros de machine learning que no son desarrolladores web y no están interesados en pasar semanas aprendiendo a utilizar estos marcos para crear aplicaciones web.
Nadia mhadhbi's photo

Nadia mhadhbi

18 min

tutorial

Tutorial de Pandas: DataFrames en Python

Explora el análisis de datos con Python. Los DataFrames de Pandas facilitan la manipulación de tus datos, desde la selección o sustitución de columnas e índices hasta la remodelación de tus datos.
Karlijn Willems's photo

Karlijn Willems

20 min

See MoreSee More