Tutorial
Principales diferencias entre matplotlib, seaborn y plotly
Compara las principales librerías de visualización de Python: Matplotlib, Seaborn y Plotly. Aprende cuándo usar cada librería, sus fortalezas, limitaciones y mejores prácticas para diferentes necesidades de visualización.
¿Qué librerías de Python puedes usar para visualización de datos? ¿En qué casos usas cada una de ellas?
Matplotlib
para gráficos altamente personalizables.Seaborn
para gráficos automatizados basados en Matplotlib.Plotly
para gráficos interactivos.
¿Cómo importas estas librerías en el entorno de Python?
Debes importar una sub-librería que contenga las principales funciones de graficado para algunas de ellas.
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
¡Suficiente teoría! Veamos algunos ejemplos usando el mismo gráfico para cada librería.
Datos
Usando el famoso conjunto de datos gapminder
, graficaremos datos de países en 2007.
import pandas as pd
df = pd.read_excel('gapminder.xlsx')

Gráfico de dispersión
Matplotlib
Matplotlib
crea un gráfico de dispersión simple sin etiquetas en los ejes.
plt.scatter(x='gdpPercap', y='lifeExp', data=df)

Seaborn
Por otro lado, seaborn
crea un gráfico de dispersión con etiquetas en los ejes. E incluso añade algunos bordes a los puntos.
sns.scatterplot(x='gdpPercap', y='lifeExp', data=df)

Ahora, ¿qué pasa si quisieras colorear los puntos por continente?
Con matplotlib
, obtienes un error fatal porque espera una columna con nombres de colores, no una columna con nombres de continentes.
plt.scatter(x='gdpPercap', y='lifeExp', data=df, c='continent')
# ValueError: Invalid RGBA argument: 'Asia'
Por otro lado, seaborn
automatiza la creación de un gráfico de dispersión con una leyenda codificada por colores para la columna continent
, usando el parámetro hue
.
sns.scatterplot(x='gdpPercap', y='lifeExp', data=df, hue='continent')

Ahora, ¿cómo puedes identificar el país representado por cada punto?
Este proceso no es automático al usar matplotlib
, ni tampoco al usar seaborn
.
Necesitarías crear un horrible bucle for para añadir los nombres de países a los puntos, terminando con un gráfico desordenado.
sns.scatterplot(x='gdpPercap', y='lifeExp', data=df, hue='continent')
for idx, data in df.iterrows():
plt.text(x=data['gdpPercap'], y=data['lifeExp'], s=data['country'])

Sí, puedes combinar seaborn
con matplotlib
para añadir nuevos elementos al gráfico porque seaborn
está construido sobre matplotlib
.
También, puedes añadir nuevos elementos al gráfico usando funciones de matplotlib
en una nueva línea de código—por ejemplo, un título, etiquetas o una leyenda.
sns.scatterplot(x='gdpPercap', y='lifeExp', data=df, hue='continent')
for idx, data in df.iterrows():
plt.text(x=data['gdpPercap'], y=data['lifeExp'], s=data['country'])
plt.title('Gráfico desordenado')

¿Cómo podemos ordenar el desorden de nombres de países?
Plotly
En lugar de añadir los nombres de países al gráfico, puedes pasar el cursor sobre los puntos para ver los nombres de países.
px.scatter(df, x='gdpPercap', y='lifeExp', color='continent', hover_name='country')

Me encanta plotly
porque es interactivo, y puedes hacer zoom in, zoom out, hacer clic en la leyenda para ocultar algunos países, e incluso guardar el gráfico como una imagen.
Pero no me malinterpretes, plotly
no es perfecto.
Si quisiera un gráfico altamente personalizado, usaría matplotlib
porque es más flexible, y puedes controlar cada detalle del gráfico.
Estas tres librerías contienen las funciones necesarias para crear cualquier otro tipo de gráfico. Solo elige la que mejor se adapte a tus necesidades.
Para aprender más sobre estas librerías, visita la documentación oficial:
Visita su galería de ejemplos para ver qué puedes hacer con ellas y replica los gráficos en tus proyectos con tus datos.
Conclusiones
- Si eres principiante, usa
plotly
para gráficos simples. - Si eres un usuario intermedio, usa
seaborn
conmatplotlib
para gráficos más complejos. - Si eres un usuario avanzado, usa
matplotlib
para gráficos altamente personalizables.