Saltar al contenido principal
InicioTutorialesPython

Introducción al trazado con Matplotlib en Python

Este tutorial muestra cómo utilizar Matplotlib, una potente biblioteca de visualización de datos en Python, para crear gráficos de líneas, barras y dispersión con datos bursátiles.
may 2024  · 25 min leer

Matplotlib es una potente y muy popular biblioteca de visualización de datos en Python. En este tutorial, vamos a discutir cómo crear gráficos de líneas, gráficos de barras y gráficos de dispersión en Matplotlib utilizando datos del mercado de valores en 2022. Estos son los gráficos básicos que te permitirán empezar a entender, visualizar y contar historias sobre los datos. La visualización de datos es una habilidad esencial para todos los analistas de datos y Matplotlib es una de las bibliotecas más populares para crear visualizaciones. 

Este tutorial espera algunos conocimientos básicos previos en arrays de NumPy y dataframes de pandas. Cuando utilicemos esas bibliotecas, explicaremos rápidamente lo que estamos haciendo. El enfoque principal de este tutorial es Matplotlib, que trabaja sobre estas estructuras de datos para crear visualizaciones. 

Matplotlib es muy flexible y personalizable para crear gráficos. Requiere mucho código para hacer parcelas más básicas con pocas personalizaciones. Cuando se trabaja en un entorno donde el objetivo principal es el análisis exploratorio de datos, que requiere muchos gráficos dibujados rápidamente sin tanto énfasis en la estética, la biblioteca seaborn es una gran opción, ya que se basa en Matplotlib para crear visualizaciones más rápidamente. Si su prioridad es el análisis exploratorio de datos o la creación rápida y sencilla de gráficos, consulte nuestro tutorial de Python Seaborn para principiantes.

Ejemplos de Matplotlib

Al final de este tutorial, usted será capaz de hacer visualizaciones de gran aspecto en Matplotlib. Nos centraremos en la creación de gráficos de líneas, gráficos de barras y gráficos de dispersión. También nos centraremos en cómo tomar decisiones de personalización, como el uso del color, cómo etiquetar los gráficos y cómo organizarlos de forma clara para contar una historia convincente.

image14.png

image13.png

image7.png

El conjunto de datos

Matplotlib está diseñado para trabajar con arrays NumPy y dataframes pandas. La biblioteca facilita la creación de gráficos a partir de datos tabulares. Para este tutorial, utilizaremos los precios históricos del índice Dow Jones Industrial Average (DJIA) desde 2022-01-01 hasta 2022-12-31(que encontrará aquí). Puedes establecer el intervalo de fechas en la página y luego hacer clic en el botón "descargar una hoja de cálculo".

Cargaremos el archivo csv, llamado HistoricalPrices.csv utilizando la librería pandas y visualizaremos las primeras filas utilizando el método .head().

import pandas as pd

djia_data = pd.read_csv('HistoricalPrices.csv')
djia_data.head()

image19.png

Vemos que los datos incluyen 4 columnas, una Fecha, Apertura, Máximo, Mínimo y Cierre. Los 4 últimos están relacionados con el precio del índice durante el día de negociación. A continuación se ofrece una breve explicación de cada variable.

  • Date: El día que representa la información sobre el precio de las acciones.
  • Abierto: El precio del DJIA a las 9:30 AM ET cuando abre la bolsa.
  • Alta: El precio más alto alcanzado por el DJIA durante el día.
  • Bajo: El precio más bajo alcanzado por el DJIA durante el día.
  • Cerrar: El precio del DJIA cuando el mercado dejó de cotizar a las 16:00 ET.

Como paso rápido de limpieza, también tendremos que utilizar el método rename() en pandas, ya que el conjunto de datos que hemos descargado tiene un espacio de más en los nombres de las columnas. 

djia_data = djia_data.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})

También nos aseguraremos de que la variable Date es una variable datetime y ordenaremos en orden ascendente por la fecha.  

djia_data['Date'] = pd.to_datetime(djia_data['Date'])
djia_data = djia_data.sort_values(by = 'Date')

Carga de Matplotlib

A continuación, cargaremos el submódulo pyplot de Matplotlib para poder dibujar nuestros gráficos. El módulo pyplot contiene todos los métodos relevantes que necesitaremos para crear gráficos y darles estilo. Utilizaremos el alias convencional plt. También cargaremos pandas, numpy y datetime para futuras partes de este tutorial.

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

Dibujar trazados lineales

El primer gráfico que crearemos será un gráfico lineal. Los gráficos de líneas son un tipo de gráfico muy importante, ya que muestran muy bien los datos de series temporales. A menudo es importante visualizar cómo cambian los KPI a lo largo del tiempo para comprender patrones en los datos sobre los que se puede actuar.

Parcelas lineales con una sola línea

  • Muestra cómo dibujar un gráfico lineal sencillo con una sola línea.
    • Asegúrese de enfatizar el uso de plt.show() para que el gráfico realmente se muestre.
  • Comente brevemente la trama, incluida la interpretación.

Podemos crear un gráfico de líneas en matplotlib utilizando el método plt.plot() donde el primer argumento es la variable x y el segundo argumento es la variable y en nuestro gráfico de líneas. Siempre que creemos un gráfico, debemos asegurarnos de llamar a plt.show() para ver el gráfico que hemos creado.  Vamos a visualizar el precio de cierre a lo largo del tiempo del DJIA. 

plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()

image1.png

Podemos ver que, a lo largo del año, el precio del índice comenzó en su valor más alto, seguido de algunas fluctuaciones al alza y a la baja a lo largo del año. Vemos que el precio fue más bajo hacia octubre, seguido de un fuerte aumento del precio a finales de año.

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

Podemos visualizar múltiples líneas en el mismo gráfico añadiendo otra llamada a plt.plot() antes de la función plt.show().

plt.plot(djia_data['Date'], djia_data['Open'])
plt.plot(djia_data['Date'], djia_data['Close'])


plt.show()

image16.png

A lo largo del año, vemos que los precios de apertura y cierre del DJIA estuvieron relativamente próximos entre sí en cada día, sin un patrón claro de que uno estuviera siempre por encima o por debajo del otro.  

Añadir una leyenda

Si queremos distinguir qué línea representa a qué columna, podemos añadir una leyenda. Esto creará una etiqueta codificada por colores en la esquina del gráfico. Podemos hacerlo utilizando plt.legend() y añadiendo parámetros de etiqueta a cada llamada a plt.plot()

plt.plot(djia_data['Date'], djia_data['Open'], label = 'Open')
plt.plot(djia_data['Date'], djia_data['Close'], label = 'Close')
plt.legend()
plt.show()

image2.png

Ahora vemos que aparece una leyenda con las etiquetas especificadas en la ubicación por defecto en la parte superior derecha (la ubicación puede especificarse utilizando el argumento loc en plt.legend()). 

Dibujar diagramas de barras

Los diagramas de barras son muy útiles para comparar valores numéricos entre categorías. Son especialmente útiles para encontrar las categorías más grandes y más pequeñas. 

En esta sección agregaremos los datos en medias mensuales utilizando pandas para poder comparar el rendimiento mensual durante 2022 para el DJIA. También utilizaremos los 6 primeros meses para facilitar la visualización de los datos.

# Import the calendar package 
from calendar import month_name

# Order by months by chronological order
djia_data['Month'] = pd.Categorical(djia_data['Date'].dt.month_name(), month_name[1:])

# Group metrics by monthly averages
djia_monthly_mean = djia_data \
    .groupby('Month') \
    .mean() \
    .reset_index()

djia_monthly_mean.head(6)

image5.png

Gráficos de barras verticales

Empezaremos creando un gráfico de barras verticales. Esto se puede hacer utilizando el método plt.bar() siendo el primer argumento la variable del eje x (Mes) y el parámetro height el eje y (Cierre).  A continuación, queremos asegurarnos de llamar a plt.show() para mostrar nuestro gráfico.

plt.bar(djia_monthly_mean['Month'], height = djia_monthly_mean['Close'])
plt.show()

image9.png

Vemos que la mayoría de los precios de cierre del DJIA estuvieron próximos entre sí, siendo el valor medio de cierre más bajo el de junio y el valor medio de cierre más alto el de enero.

Reordenación de barras en gráficos de barras

Si queremos mostrar estas barras ordenadas de mayor a menor precio medio mensual de cierre, podemos ordenar las barras usando el método sort_values() en pandas y luego usando el mismo método plt.bar(). 

djia_monthly_mean_srtd = djia_monthly_mean.sort_values(by = 'Close', ascending = False)

plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()

image10.png

Como puede ver, es mucho más fácil ver qué meses tuvieron el precio medio de cierre del DJIA más alto y qué meses tuvieron los promedios más bajos. También es más fácil comparar entre meses y clasificarlos.

Gráficos de barras horizontales

  • Muestra cómo intercambiar los ejes para que las barras sean horizontales.
  • Comente brevemente la trama, incluida la interpretación.

A veces es más fácil interpretar los gráficos de barras y leer las etiquetas cuando hacemos el diagrama de barras con barras horizontales. Podemos hacerlo utilizando el método plt.hbar().  

plt.barh(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()

image17.png
Como puede ver, las etiquetas de cada categoría (mes) son más fáciles de leer que cuando las barras eran verticales. Todavía podemos comparar fácilmente entre grupos. Este gráfico de barras horizontales es especialmente útil cuando hay muchas categorías.

Dibujar gráficos de dispersión

Los gráficos de dispersión son muy útiles para identificar relaciones entre 2 variables numéricas. Esto puede darle una idea de qué esperar en una variable cuando la otra variable cambia y también puede ser muy informativo en su decisión de utilizar diferentes técnicas de modelización como la regresión lineal o no lineal.  

Gráficos de dispersión

De forma similar a los otros gráficos, se puede crear un gráfico de dispersión utilizando pyplot.scatter() donde el primer argumento es la variable del eje x y el segundo argumento es la variable del eje y. En este ejemplo, observaremos la relación entre el precio de apertura y cierre del DJIA.

plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()

image4.png

En el eje x tenemos el precio de apertura del DJIA y en el eje y tenemos el precio de cierre. Como cabría esperar, a medida que aumenta el precio de apertura, se observa una fuerte relación en el aumento del precio de cierre.

Gráficos de dispersión con una línea de tendencia

A continuación, añadiremos una línea de tendencia al gráfico para mostrar de forma más explícita la relación lineal entre las variables de apertura y cierre. Para ello, utilizaremos el método numpy polyfit() y poly1d(). El primer método nos dará un ajuste polinómico por mínimos cuadrados donde el primer argumento es la variable x, la segunda variable es la variable y, y la tercera variable son los grados del ajuste (1 para lineal). El segundo método nos dará una clase polinómica unidimensional que podemos utilizar para crear una línea de tendencia utilizando plt.plot().

z = np.polyfit(djia_data['Open'], djia_data['Close'], 1)
p = np.poly1d(z)


plt.scatter(djia_data['Open'], djia_data['Close'])
plt.plot(djia_data['Open'], p(djia_data['Open']))
plt.show()

image20.png

Como podemos ver, la línea del fondo del gráfico sigue de cerca la tendencia del diagrama de dispersión, ya que la relación entre el precio de apertura y el de cierre es fuertemente lineal. Vemos que a medida que aumenta el precio de apertura, el precio de cierre suele aumentar a un ritmo similar y lineal.

Establecer el título del gráfico y las etiquetas de los ejes

Los títulos de los gráficos y las etiquetas de los ejes facilitan considerablemente la comprensión de una visualización y permiten al espectador entender rápidamente y con mayor claridad lo que está viendo. Podemos hacerlo añadiendo más capas utilizando plt.xtitle(), plt.ylabel() y plt.xlabel(), lo que demostraremos con el gráfico de dispersión que hicimos en la sección anterior. 

plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()

image8.png

Cambio de colores

El color puede ser una herramienta poderosa en las visualizaciones de datos para enfatizar ciertos puntos o contar una historia coherente con colores consistentes para una idea determinada. En Matplotlib, podemos cambiar los colores utilizando colores con nombre (por ejemplo, "rojo", "azul", etc.), código hexadecimal ("#f4db9a", "#383c4a", etc.), y tuplas rojo-verde-azul (por ejemplo. (125, 100, 37), (30, 54, 121), etc.). 

Líneas

Para un gráfico de líneas, podemos cambiar un color utilizando el atributo color en plt.plot(). A continuación, cambiamos el color de nuestra línea de precio de apertura a "negro" y nuestra línea de precio de cierre a "rojo".

plt.plot(djia_data['Date'], djia_data['Open'], color = 'black')
plt.plot(djia_data['Date'], djia_data['Close'], color = 'red')
plt.show()

image3.png

Bares

En el caso de las barras, podemos pasar una lista al atributo color para especificar el color de cada línea. Supongamos que queremos destacar el precio medio de enero para señalar la fortaleza del precio medio de cierre. Podemos hacerlo dando a esa barra un color único para llamar la atención sobre ella. 

plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'], color = ['blue', 'gray', 'gray', 'gray', 'gray', 'gray'])
plt.show()

image11.png

Puntos

Por último, para los gráficos de dispersión, podemos cambiar el color utilizando el atributo color de plt.scatter(). Colorearemos todos los puntos de enero en azul y todos los demás puntos en gris para mostrar una historia similar a la de la visualización anterior. 

plt.scatter(djia_data[djia_data['Month'] == 'January']['Open'], djia_data[djia_data['Month'] == 'January']['Close'], color = 'blue')

plt.scatter(djia_data[djia_data['Month'] != 'January']['Open'], djia_data[djia_data['Month'] != 'January']['Close'], color = 'gray')

plt.show()

image18.png
Using Colormaps

Colormaps son colores Matplotlib incorporados que se escalan en función de la magnitud del valor(documentación aquí). En general, los mapas de colores quedan bien juntos estéticamente y ayudan a contar una historia en los valores crecientes. 

En el ejemplo siguiente, utilizamos un mapa de colores pasando el precio de cierre (variable y) al atributo c, y el mapa de colores del plasma a través de cmap. Vemos que a medida que aumentan los valores, el color asociado se vuelve más brillante y amarillo, mientras que el extremo inferior de los valores es morado y más oscuro.

plt.scatter(djia_data['Open'], djia_data['Close'], c=djia_data['Close'], cmap = plt.cm.plasma)

plt.show()

 image6.png

Ajuste de los límites de los ejes

A veces, resulta útil observar un rango específico de valores en un gráfico. Por ejemplo, si el DJIA cotiza actualmente en torno a los 30.000 dólares, puede que sólo nos interese el comportamiento en torno a ese precio.  Podemos pasar una tupla a plt.xlim() y plt.ylim() para establecer los límites x e y respectivamente. El primer valor de la tupla es el límite inferior, y el segundo valor de la tupla es el límite superior.

image15.png

Guardar parcelas

Por último, podemos guardar los gráficos que creemos en matplotlib utilizando el método plt.savefig(). Podemos guardar el archivo en muchos formatos distintos, como "png", "pdf" y "svg". El primer argumento es el nombre del archivo. El formato se infiere a partir de la extensión del archivo (o puede anularlo con el argumento format ).

plt.scatter(djia_data['Open'], djia_data['Close'])
plt.savefig('DJIA 2022 Scatterplot Open vs. Close.png')

Pase al siguiente nivel

Hemos cubierto los conceptos básicos de Matplotlib en este tutorial y ahora puede hacer gráficos de líneas básicas, gráficos de barras y gráficos de dispersión. Matplotlib es una biblioteca avanzada con un montón de grandes características para crear visualizaciones estéticamente agradables. Si desea llevar sus conocimientos de Matplotlib al siguiente nivel, siga nuestro curso Introducción a la visualización de datos con Matplotlib. También puede descargar nuestra Matplotlib Cheat Sheet: Plotting in Python como referencia cuando empiece a crear sus propias visualizaciones. 

Preguntas frecuentes sobre Matplotlib

¿Qué es Matplotlib en Python?

Matplotlib es una popular biblioteca de visualización de datos en Python. Se utiliza a menudo para crear visualizaciones estáticas, interactivas y animadas en Python. Matplotlib permite generar gráficos, histogramas, diagramas de barras, gráficos de dispersión, etc., con unas pocas líneas de código.

¿Por qué utilizar Matplotlib para la visualización de datos?

Hay varias razones. En primer lugar, Matplotlib es flexible. Admite una amplia gama de gráficos y diagramas, y se integra bien con muchas otras bibliotecas de Python, como NumPy y pandas. En segundo lugar, es una biblioteca madura y muy utilizada, por lo que cuenta con una comunidad sólida y muchos recursos y tutoriales disponibles. Por último, al estar en Python, puedes automatizar y personalizar tus gráficos como parte de tus procesos de datos.

¿Cómo se instala Matplotlib?

Puede instalar Matplotlib con pip, el instalador de paquetes de Python. Abra su terminal y escriba: pip install matplotlib. Si utiliza un cuaderno Jupyter, puede ejecutar este comando en una celda de código añadiendo un signo de exclamación: !pip install matplotlib.

¿Cómo se crea un gráfico básico en Matplotlib?

He aquí un ejemplo sencillo. En primer lugar, tendrás que importar la biblioteca Matplotlib. El módulo más utilizado es pyplot, y suele importarse con el alias plt:

import matplotlib.pyplot as plt

A continuación, puede crear un gráfico lineal básico como éste:

plt.plot([1, 2, 3, 4]) plt.ylabel('Some Numbers') plt.show()

En este ejemplo, plt.plot([1, 2, 3, 4]) se utiliza para trazar la lista especificada de números. La línea plt.ylabel('Some Numbers') establece la etiqueta para el eje y, y plt.show() muestra el gráfico.

Temas

Más información sobre Python

Course

Introduction to Data Visualization with Matplotlib

4 hr
171.4K
Learn how to create, customize, and share data visualizations using Matplotlib.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

blog

11 técnicas de visualización de datos para cada caso de uso con ejemplos

Descubra los análisis, técnicas y herramientas más populares para dominar el arte de la visualización de datos.

Javier Canales Luna

16 min

tutorial

Cómo recortar una cadena en Python: Tres métodos diferentes

Aprenda los fundamentos del recorte de caracteres iniciales y finales de una cadena en Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Pandas Profiling (ydata-profiling) en Python: Guía para principiantes

Aprenda a utilizar la biblioteca ydata-profiling en Python para generar informes detallados de conjuntos de datos con muchas características.
Satyam Tripathi's photo

Satyam Tripathi

9 min

tutorial

Guía completa de listas vacías en Python

Aprenda las principales operaciones con listas y los casos de uso de las listas vacías en Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Tipos de gráficos de datos y cómo crearlos en Python

Explore varios tipos de gráficos de datos, desde los más comunes hasta los más avanzados y poco convencionales, qué muestran, cuándo utilizarlos, cuándo evitarlos y cómo crearlos y personalizarlos en Python.
Elena Kosourova's photo

Elena Kosourova

21 min

tutorial

Guía paso a paso para hacer mapas en Python usando la librería Plotly

Haz que tus datos destaquen con impresionantes mapas creados con Plotly en Python
Moez Ali's photo

Moez Ali

7 min

See MoreSee More