curso
Introducción al trazado con Matplotlib en Python
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.
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()
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()
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()
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()
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)
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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.
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.
Más información sobre Python
curso
Python for MATLAB Users
curso
Introduction to NumPy
tutorial
Gráficos lineales en MatplotLib con Python
tutorial
Gráfico lineal de series temporales Matplotlib
tutorial
Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos
tutorial
Histogramas en Matplotlib
tutorial
Tipos de gráficos de datos y cómo crearlos en Python
tutorial