Plotly en Python permite crear gráficos que el lector puede explorar directamente. En lugar de limitarse a una imagen estática, una figura de Plotly ofrece información al pasar el cursor, zoom, selección de regiones, leyendas interactivas y exportación desde el navegador. Estas funciones son útiles en análisis de datos, informes, presentaciones, paneles y proyectos educativos.
En esta guía aprenderás a instalar Plotly, crear gráficos de líneas, barras y dispersión, trabajar con DataFrames de Pandas, personalizar títulos y etiquetas, añadir anotaciones y guardar resultados. Para preparar los datos antes de visualizarlos, conviene revisar la guía de Pandas para principiantes y la introducción a NumPy en Python.
Qué es Plotly
Plotly es una biblioteca de visualización que genera figuras interactivas para scripts, notebooks y páginas web. Su documentación oficial distingue dos interfaces principales:
- Plotly Express: una interfaz de alto nivel, breve y especialmente cómoda para DataFrames.
- Graph Objects: una interfaz de nivel más bajo que ofrece control detallado sobre trazas, ejes, anotaciones y diseño.
Ambas producen el mismo tipo de figura. Plotly se encarga del código necesario en el navegador, por lo que no necesitas programar JavaScript para crear una visualización útil. La documentación oficial de Plotly para Python contiene galerías y referencias completas.
Instalar Plotly
Crea primero un entorno aislado con la guía de entornos virtuales con venv. Después instala Plotly y Pandas:
python -m pip install plotly pandasComprueba la instalación:
import plotly
print(plotly.__version__)Si el editor no encuentra el paquete, confirma que usa el mismo intérprete en el que ejecutaste pip.
Crear un gráfico de líneas
import plotly.express as px
meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun"]
ventas = [15000, 18000, 12000, 22000, 25000, 28000]
fig = px.line(
x=meses,
y=ventas,
markers=True,
title="Ventas mensuales",
labels={"x": "Mes", "y": "Ventas"},
)
fig.show()fig.show() abre la figura en el renderizador disponible, normalmente una pestaña del navegador o una celda del notebook. Al mover el cursor aparecen los valores exactos. También puedes arrastrar sobre una región para ampliar y hacer doble clic para restablecer la vista.
Crear un gráfico de barras
Las barras son adecuadas para comparar categorías:
productos = ["Portátil", "Ratón", "Teclado", "Monitor"]
unidades = [45, 120, 85, 60]
fig = px.bar(
x=productos,
y=unidades,
text_auto=True,
title="Unidades vendidas por producto",
labels={"x": "Producto", "y": "Unidades"},
)
fig.show()Cuando las etiquetas son largas, un gráfico horizontal puede resultar más legible. Intercambia los ejes y utiliza orientation="h".
Analizar relaciones con un gráfico de dispersión
horas = [2, 3, 4, 5, 6, 7, 8, 9]
notas = [54, 61, 64, 72, 76, 83, 87, 92]
fig = px.scatter(
x=horas,
y=notas,
title="Horas de estudio y calificaciones",
labels={"x": "Horas", "y": "Calificación"},
)
fig.show()La dispersión ayuda a observar tendencias, grupos y valores atípicos. Sin embargo, una relación visual no demuestra por sí sola que una variable cause la otra.
Trabajar con Pandas
Plotly Express acepta directamente nombres de columnas:
import pandas as pd
import plotly.express as px
datos = pd.DataFrame({
"mes": ["Ene", "Feb", "Mar", "Abr"],
"ventas": [15000, 18000, 12000, 22000],
"gastos": [8000, 9000, 7500, 11000],
})
fig = px.line(
datos,
x="mes",
y=["ventas", "gastos"],
markers=True,
title="Ventas y gastos",
)
fig.show()Antes de crear la figura, revisa tipos, valores ausentes y orden de categorías. La documentación oficial de Pandas explica limpieza, selección y transformación de DataFrames. Para un flujo completo, consulta también el artículo sobre análisis de datos con Pandas y NumPy.
Usar Graph Objects
Graph Objects resulta útil cuando una figura contiene varias series o requiere un diseño preciso:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter(
x=meses,
y=[15000, 18000, 12000, 22000, 25000, 28000],
mode="lines+markers",
name="Tienda A",
))
fig.add_trace(go.Scatter(
x=meses,
y=[12000, 16000, 14000, 19000, 23000, 26000],
mode="lines+markers",
name="Tienda B",
))
fig.update_layout(
title="Comparación de ventas",
xaxis_title="Mes",
yaxis_title="Ventas",
hovermode="x unified",
)
fig.show()Cada llamada a add_trace() añade una serie. El modo de información unificada facilita comparar todas las series en la misma posición del eje X.
Personalizar títulos, etiquetas y anotaciones
fig.update_layout(
title={"text": "Rendimiento mensual", "x": 0.5},
legend_title_text="Métrica",
template="plotly_white",
)
fig.update_traces(
hovertemplate="%{x}: %{y:,.0f}<extra></extra>"
)
fig.add_annotation(
x="Abr",
y=22000,
text="Inicio de campaña",
showarrow=True,
)Una visualización clara necesita títulos descriptivos, unidades y una leyenda comprensible. Evita acumular demasiadas series, colores o anotaciones. Si el gráfico exige una explicación extensa para entender qué representa, probablemente convenga dividirlo.
Guardar en HTML o imagen
Para conservar la interactividad:
fig.write_html("ventas_interactivas.html")El archivo se abre en cualquier navegador y mantiene zoom, información emergente y leyenda. Para PNG, SVG o PDF, instala Kaleido:
python -m pip install kaleidofig.write_image(
"ventas.png",
width=1200,
height=700,
scale=2,
)HTML es adecuado cuando el lector debe explorar los datos. Una imagen estática funciona mejor en documentos, correos o diapositivas.
Plotly en notebooks
Plotly funciona tanto en Jupyter como en Google Colab. La comparación de Google Colab y Jupyter Notebook ayuda a elegir entre un entorno en la nube y uno local. En ambos casos, reinicia el kernel y ejecuta todas las celdas antes de compartir el notebook para evitar dependencias ocultas del orden de ejecución.
Errores frecuentes
- Columnas numéricas almacenadas como texto: conviértelas antes de graficar.
- Categorías desordenadas: ordena el DataFrame o define un orden explícito.
- Demasiadas trazas: resume los datos o crea varias figuras.
- La imagen no se exporta: verifica que Kaleido esté instalado en el mismo entorno.
- El gráfico no aparece en un servidor: guárdalo como HTML y ábrelo de forma independiente.
- Información sensible en la figura: revisa etiquetas, datos emergentes y archivos exportados antes de compartirlos.
Plotly o Matplotlib
Plotly destaca cuando el lector necesita explorar valores, ampliar regiones o activar y desactivar series. Matplotlib es una opción sólida para gráficos estáticos, informes impresos y control científico detallado. Puedes consultar la guía de Matplotlib para principiantes y utilizar ambas bibliotecas en el mismo proyecto según el formato de salida.
Conclusión
Plotly en Python convierte datos en visualizaciones interactivas sin exigir conocimientos de JavaScript. Comienza con Plotly Express para gráficos comunes y pasa a Graph Objects cuando necesites varias trazas o personalización avanzada. Limpia los datos antes de graficar, utiliza títulos y unidades claros y elige entre HTML e imagen según la forma en que el público consumirá el resultado.

