Tutorial
Principales diferencias entre matplotlib, seaborn y plotly
¿Qué biblioteca deberías usar para visualización de datos en Python? ¿Matplotlib, Seaborn o Plotly? Aprende las principales diferencias entre ellas y cuándo usar cada una.
¿Qué bibliotecas de Python puedes usar para visualización de datos? ¿En qué casos usas cada una de ellas?
Matplotlibpara gráficos altamente personalizables.Seabornpara gráficos automatizados basados en Matplotlib.Plotlypara gráficos interactivos.
¿Cómo importas estas bibliotecas en el entorno de Python?
Para algunas de ellas, debes importar una sub-biblioteca que contiene las funciones principales de graficación.
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 biblioteca.
Datos
Usando el famoso dataset 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 scatter 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 cuando usas matplotlib, ni cuando usas seaborn.
Necesitarías crear un horrible bucle for para añadir los nombres de los países a los puntos, terminando con un gráfico saturado.
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.
Además, 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 saturado')
¿Cómo podemos despejar 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 los países.
px.scatter(df, x='gdpPercap', y='lifeExp', color='continent', hover_name='country')
Me encanta plotly porque es interactivo, y puedes hacer zoom, alejar, hacer clic en la leyenda para ocultar algunos países, e incluso guardar el gráfico como 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 bibliotecas 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 bibliotecas, visita la documentación oficial:
Visita sus galerías 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
plotlypara gráficos simples. - Si eres usuario intermedio, usa
seabornconmatplotlibpara gráficos más complejos. - Si eres usuario avanzado, usa
matplotlibpara gráficos altamente personalizables.