Saltar al contenido principal
InicioTutorialesPython

Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos

Descubra 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.
may 2024  · 12 min leer

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:

Gráfico unifilar Seaborn con trazado lineal

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:

Gráfico unifilar Seaborn con relplot

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:

Gráfico unifilar Seaborn - tamaño de la figura ajustado con relplot

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:

Seaborn plot.png

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:

Gráfico unifilar Seaborn - añadido título y etiquetas de eje

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:

Gráfico unifilar Seaborn - tamaño de letra ajustado

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:

Gráfico unifilar Seaborn - línea personalizada

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:

Parcela unifilar Seaborn - marcadores añadidos y personalizados

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:

Gráfico de líneas múltiples Seaborn - objetos de ejes separados para las variables dependientes

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:

Gráfico de líneas múltiples Seaborn con hue

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:

Gráfico de líneas múltiples Seaborn utilizando el estilo

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:

Gráfico de líneas múltiples de Seaborn utilizando el tamaño

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:

Gráfico multilineal Seaborn - ajustes generales

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:

Gráfico de líneas múltiples de Seaborn utilizando el tono y proporcionando una paleta personalizada

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:

Gráfico de líneas múltiples Seaborn que utiliza el tono y proporciona una paleta estándar

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:

Gráfico de líneas múltiples Seaborn utilizando hue - estilo, color y anchura de línea ajustados

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:

Trazado de líneas múltiples Seaborn utilizando el estilo y proporcionando un patrón personalizado

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:

Gráfico de líneas múltiples Seaborn mediante estilo: estilo, color y anchura de línea ajustados.

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:

Trazado de líneas múltiples Seaborn utilizando el tamaño y proporcionando anchos de línea personalizados.

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:

Gráfico de líneas múltiples Seaborn utilizando el tamaño - estilo de línea, color y anchura ajustados.

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:

Gráfico de líneas múltiples Seaborn con marcadores del mismo color, estilo y tamaño

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:

Trazado de líneas múltiples Seaborn con marcadores de diferentes estilos

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:

Gráfico de líneas múltiples Seaborn con líneas continuas y marcadores de diferentes estilos

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.

Temas
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's photo

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