Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos
Un gráfico de líneas es una visualización de datos relacionales que muestra cómo cambia una variable continua cuando lo hace otra. Es uno de los gráficos más utilizados en finanzas, ventas, marketing, sanidad, ciencias naturales, etc.
En este tutorial, vamos a discutir cómo utilizar Seaborn, una popular biblioteca de visualización de datos de Python, para crear y personalizar gráficos de líneas en Python.
Presentación del conjunto de datos
Para tener algo con lo que practicar los gráficos de líneas seaborn, primero descargaremos un conjunto de datos de Kaggle llamado Tipos de cambio diarios por euro 1999-2023. A continuación, importaremos todos los paquetes necesarios y leeremos y limpiaremos el marco de datos. Sin entrar en detalles del proceso de limpieza, el código siguiente demuestra los pasos a realizar:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 1, 4, -2]]
df.columns = ['Date', 'Australian dollar', 'Canadian dollar', 'US dollar']
df = pd.melt(df, id_vars='Date', value_vars=['Australian dollar', 'Canadian dollar', 'US dollar'], value_name='Euro rate', var_name='Currency')
df['Date'] = pd.to_datetime(df['Date'])
df = df[df['Date']>='2022-12-01'].reset_index(drop=True)
df['Euro rate'] = pd.to_numeric(df['Euro rate'])
print(f'Currencies: {df.Currency.unique()}\n')
print(df.head())
print(f'\n{df.Date.dt.date.min()}/{ df.Date.dt.date.max()}')
Salida:
Currencies: ['Australian dollar' 'Canadian dollar' 'US dollar']
Date Currency Euro rate
0 2023-01-27 Australian dollar 1.5289
1 2023-01-26 Australian dollar 1.5308
2 2023-01-25 Australian dollar 1.5360
3 2023-01-24 Australian dollar 1.5470
4 2023-01-23 Australian dollar 1.5529
2022-12-01/2023-01-27
El marco de datos resultante contiene los tipos de cambio diarios (días hábiles) del euro para los dólares australiano, canadiense y estadounidense para el período comprendido entre el 01.12.2022 y el 27.01.2023, ambos inclusive.
Ahora, estamos listos para sumergirnos en la creación y personalización de trazados de líneas seaborn Python.
Conceptos básicos de la línea Seaborn
Para crear un gráfico de líneas en Seaborn, podemos utilizar una de las dos funciones: lineplot()
o relplot()
. En general, tienen muchas funcionalidades en común, junto con nombres de parámetros idénticos. La principal diferencia es que relplot() nos permite crear gráficos de líneas con múltiples líneas en diferentes facetas. En cambio, lineplot() permite trabajar con intervalos de confianza y agregación de datos.
En este tutorial, utilizaremos principalmente la función lineplot().
El curso Introducción a la visualización de datos con Seaborn le ayudará a aprender y practicar las principales funciones y métodos de la biblioteca seaborn. También puede consultar nuestro tutorial Seaborn para principiantes para familiarizarse con la popular biblioteca Python.
Creación de un único trazado de líneas marinas
Podemos crear un gráfico de líneas que muestre las relaciones entre dos variables continuas de la siguiente manera:
usd = df[df['Currency']=='US dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
Salida:
El gráfico anterior muestra la dinámica de los tipos EUR-USD. Definimos las variables a trazar en los ejes x e y (los parámetros x e y ) y el marco de datos (data) del que tomar estas variables.
A modo de comparación, para crear el mismo gráfico utilizando relplot(), escribiríamos lo siguiente:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line')
Salida:
En este caso, pasamos un argumento más específico de la función relplot(): kind='line'. Por defecto, esta función crea un gráfico de dispersión.
Personalización de un único trazado de líneas
Podemos personalizar el gráfico anterior de muchas maneras para hacerlo más legible e informativo. Por ejemplo, podemos ajustar el tamaño de la figura, añadir etiquetas de título y eje, ajustar el tamaño de la fuente, personalizar la línea, añadir y personalizar marcadores, etc. Veamos cómo aplicar estas mejoras en seaborn.
Ajustar el tamaño de la figura
Dado que Seaborn está construido sobre matplotlib, podemos utilizar matplotlib.pyplot para ajustar el tamaño de la figura:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd)
Salida:
En cambio, con relplot(), podemos utilizar los parámetros de altura y aspecto (la relación entre anchura y altura) con el mismo fin:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line', height=6, aspect=4)
Salida:
Añadir un título y etiquetas de eje
Para añadir un título al gráfico y etiquetas a los ejes, podemos utilizar la función set() en el objeto seaborn line plot pasando los argumentos title, xlabel, e ylabel:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
Salida:
Ajustar el tamaño de letra
Una forma conveniente de ajustar el tamaño de la fuente es utilizar la función set_theme() y experimentar con diferentes valores del parámetro font_scale:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Tenga en cuenta que también hemos añadido style='white' para evitar anular el estilo inicial.
Cambiar el color, estilo y tamaño de las líneas
Para personalizar la línea de trazado, podemos pasar algunos parámetros opcionales comunes con matplotlib.pyplot.plot, como el color, el estilo de línea o el ancho de línea:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, linestyle='dotted', color='magenta', linewidth=5).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Añadir marcadores y personalizar su color, estilo y tamaño
Es posible añadir marcadores en la línea y personalizar su aspecto. Además, en este caso, podemos utilizar algunos parámetros de matplotlib, como marker, markerfacecolor, o markersize:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, marker='*', markerfacecolor='limegreen', markersize=20).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
La documentación nos proporciona la lista definitiva de los parámetros que debemos utilizar para mejorar la estética de un trazado de líneas marinas. En concreto, podemos ver todas las opciones posibles de marcadores.
En nuestra hoja de trucos de Seaborn, encontrará otras formas de personalizar un trazado de líneas en Seaborn.
Parcelas de líneas Seaborn con varias líneas
A menudo, necesitamos explorar cómo cambian varias variables continuas en función de otra variable continua. Para ello, podemos construir un gráfico de líneas seaborn con múltiples líneas. Las funciones lineplot() y relplot() también son aplicables a estos casos.
Creación de un gráfico de líneas seaborn con varias líneas
Técnicamente, es posible crear un gráfico de líneas seaborn con múltiples líneas simplemente construyendo un objeto de ejes separado para cada variable dependiente, es decir, cada línea:
aud = df[df['Currency']=='Australian dollar'].reset_index(drop=True)
cad = df[df['Currency']=='Canadian dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
sns.lineplot(x='Date', y='Euro rate', data=aud)
sns.lineplot(x='Date', y='Euro rate', data=cad)
Salida:
Más arriba, hemos extraído otros dos subconjuntos de nuestro marco de datos inicial df (para dólares australianos y canadienses) y hemos representado gráficamente cada tipo de cambio del euro frente al tiempo. Sin embargo, existen soluciones más eficientes: utilizar los parámetros hue, style o size, disponibles tanto en lineplot() como en relplot().
Uso del parámetro de tonalidad
Este parámetro funciona de la siguiente manera: le asignamos el nombre de una columna del marco de datos que contenga valores categóricos y, a continuación, seaborn genera un gráfico de líneas para cada categoría dando un color diferente a cada línea:
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency')
Salida:
Con sólo una línea de código sencillo, creamos un gráfico de líneas de seaborn para tres categorías. Tenga en cuenta que pasamos el marco de datos inicial df en lugar de sus subconjuntos para diferentes monedas.
Utilización del parámetro de estilo
El parámetro de estilo funciona de la misma manera que el tono, sólo que distingue entre las categorías utilizando diferentes estilos de línea (sólida, discontinua, punteada, etc.), sin afectar al color:
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency')
Salida:
Utilizar el parámetro de tamaño
Al igual que el tono y el estilo, el parámetro de tamaño crea una línea separada para cada categoría. No afecta al color ni al estilo de las líneas, pero hace que cada una de ellas tenga una anchura diferente:
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency')
Salida:
Personalización de un gráfico de líneas seaborn con varias líneas
Experimentemos ahora con la estética de nuestro gráfico. Algunas técnicas aquí son idénticas a las que aplicamos a un único gráfico de línea Seaborn. Los otros son específicos sólo para gráficos lineales con múltiples líneas.
Ajustes generales
Podemos ajustar el tamaño de la figura, añadir un título y etiquetas de los ejes, y cambiar el tamaño de la fuente del gráfico anterior de la misma forma que hicimos para un gráfico unifilar:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Cambiar el color, el estilo y el tamaño de cada línea
Anteriormente, vimos que cuando se utilizan los parámetros tono, estilo o tamaño, seaborn proporciona un conjunto predeterminado de colores/estilos/tamaños para un gráfico de líneas con múltiples líneas. Si es necesario, podemos anular estos valores por defecto y seleccionar colores/estilos/tamaños por nosotros mismos.
Cuando utilizamos el parámetro hue, también podemos pasar el argumento palette como una lista o tupla de nombres de colores matplotlib:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen']).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
También es posible aplicar directamente una paleta matplotlib existente:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette='spring').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Al mismo tiempo, cuando usamos hue, todavía podemos ajustar el estilo de línea y el ancho de todas las líneas pasando los argumentos linestyle y linewidth:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen'], linestyle='dashed', linewidth=5).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
En su lugar, cuando creamos un gráfico de líneas seaborn con múltiples líneas utilizando el parámetro de estilo, podemos asignar una lista (o una tupla) de listas (o tuplas) a un parámetro llamado guiones:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
En la lista anterior de listas asignadas a guiones, el primer elemento de cada sublista representa la longitud de un segmento de la línea correspondiente, mientras que el segundo elemento - la longitud de un hueco.
Nota: para representar una línea continua, debemos establecer la longitud de un hueco en cero, por ejemplo [1, 0].
Para ajustar el color y la anchura de todas las líneas de este gráfico, proporcionamos los argumentos color y anchura de línea, igual que hicimos al personalizar un gráfico de una sola línea seaborn:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]], color='darkviolet', linewidth=4).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Por último, cuando utilizamos el parámetro tamaño para crear un gráfico de líneas múltiples seaborn, podemos regular la anchura de cada línea mediante el parámetro tamaños. Recibe una lista (o tupla) de números enteros:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Para personalizar el color y el estilo de todas las líneas de este gráfico, necesitamos proporcionar los argumentos linestyle y color:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5], linestyle='dotted', color='teal').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Añadir marcadores y personalizar su color, estilo y tamaño
Es posible que queramos añadir marcadores en nuestro gráfico de líneas múltiples seaborn.
Para añadir marcadores del mismo color, estilo y tamaño en todas las líneas, necesitamos utilizar los parámetros de matplotlib, como marker, markerfacecolor, markersize, etc., tal y como hicimos para un gráfico de una sola línea:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', marker='o', markerfacecolor='orangered', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Las cosas son diferentes, sin embargo, cuando queremos diferentes marcadores para cada línea. En este caso, tenemos que utilizar el parámetro de marcadores, que, sin embargo, de acuerdo con las funcionalidades de seaborn, sólo funciona cuando se especifica el parámetro de estilo:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
En el gráfico anterior, podemos hacer que todas las líneas sean sólidas proporcionando el argumento guiones y estableciendo el patrón de estilo [1, 0] para cada línea:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], dashes=[[1, 0], [1, 0], [1, 0]], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Salida:
Conclusión
Para recapitular, en este tutorial hemos aprendido una serie de formas de crear y personalizar un gráfico de líneas Seaborn con una o varias líneas.
Con seaborn, podemos hacer mucho más para ajustar aún más un trazado de líneas. Por ejemplo:
- Agrupar líneas por más de una variable categórica
- Personalizar la leyenda
- Crear gráficos de líneas con varias líneas en diferentes facetas
- Visualizar y personalizar el intervalo de confianza
- Personalizar las marcas del eje temporal y sus etiquetas para un gráfico de líneas de series temporales
Para profundizar en qué y cómo se puede hacer con seaborn, considere tomar nuestro curso Intermediate Data Visualization with Seaborn.
Preguntas frecuentes sobre la línea Seaborn
¿Qué es una trama lineal en Seaborn?
Un gráfico de líneas es un tipo de gráfico en Seaborn que muestra la relación entre dos variables conectando los puntos de datos con una línea recta.
¿Qué tipo de datos son los más adecuados para un gráfico lineal en Seaborn?
Los gráficos de líneas son los más adecuados para datos en los que existe una relación clara entre dos variables y en los que las variables son continuas u ordinales.
¿Puedo trazar varias líneas en la misma parcela en Seaborn?
Sí, puede trazar múltiples líneas en el mismo gráfico en Seaborn utilizando el parámetro hue
para especificar una variable categórica por la que agrupar los datos.
¿Cuál es la diferencia entre un gráfico de líneas y un gráfico de dispersión en Seaborn?
Un gráfico de líneas en Seaborn muestra la relación entre dos variables con una línea recta, mientras que un gráfico de dispersión muestra la relación con puntos de datos individuales.
¿Puedo añadir una línea de regresión a mi gráfico de líneas en Seaborn?
Sí, puede añadir una línea de regresión a su gráfico de líneas en Seaborn utilizando la función regplot()
, que ajusta y traza un modelo de regresión lineal entre dos variables.
¿Cómo guardo mi trazado de líneas Seaborn en un archivo?
Puede guardar su gráfico lineal Seaborn en un archivo utilizando la función savefig()
de la biblioteca matplotlib
, que guarda la figura actual en una ruta de archivo y formato especificados.
tutorial
Python Seaborn Tutorial Para Principiantes: Empezar a visualizar datos
tutorial
Introducción al trazado con Matplotlib en Python
Kevin Babitz
25 min
tutorial
Gráficos lineales en MatplotLib con Python
tutorial
Gráfico lineal de series temporales Matplotlib
tutorial
Tutorial de visualización de datos con Python y Tableau
tutorial