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?

  1. Matplotlib para gráficos altamente personalizables.
  2. Seaborn para gráficos automatizados basados en Matplotlib.
  3. Plotly para 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 básico de datos del dataset gapminder usando bibliotecas de visualización de Python
F1. Gráfico básico de datos del dataset gapminder

Gráfico de dispersión

Matplotlib

Matplotlib crea un scatter simple sin etiquetas en los ejes.

plt.scatter(x='gdpPercap', y='lifeExp', data=df)
Gráfico de dispersión simple creado con Matplotlib mostrando PIB per cápita vs esperanza de vida
F2. Gráfico de dispersión de Matplotlib de PIB per cápita versus esperanza de vida

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)
Gráfico de dispersión con etiquetas de ejes y puntos estilizados, creado usando Seaborn
F3. Gráfico de dispersión de Seaborn con ejes etiquetados y puntos estilizados

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')
Gráfico de dispersión codificado por colores por continente usando el parámetro hue de Seaborn
F4. Gráfico de dispersión de Seaborn codificado por colores por continente

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'])
Gráfico de dispersión de Seaborn con nombres de países superpuestos creando una apariencia saturada
F5. Gráfico de dispersión saturado con nombres de países usando Seaborn y Matplotlib

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')
Gráfico de dispersión muy saturado con nombres de países y un título, mostrando las desventajas del etiquetado excesivo
F6. Gráfico muy saturado con nombres de países y título añadido

¿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')
Gráfico de dispersión interactivo de Plotly con puntos que muestran nombres de países al pasar el cursor
F7. Gráfico de dispersión interactivo de Plotly con puntos de datos interactivos

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

  1. Si eres principiante, usa plotly para gráficos simples.
  2. Si eres usuario intermedio, usa seaborn con matplotlib para gráficos más complejos.
  3. Si eres usuario avanzado, usa matplotlib para gráficos altamente personalizables.

Suscríbete a nuestro newsletter

Recibe insights semanales sobre datos, automatización e IA.

© 2025 Datons. All rights reserved.