Plotly
Plotly crea gráficos interactivos listos para la web con la capacidad de pasar el ratón por encima, hacer zoom y desplazarse. Exporta a HTML o incrusta en aplicaciones Dash.
Busca en todas las páginas de la documentación
Plotly crea gráficos interactivos listos para la web con la capacidad de pasar el ratón por encima, hacer zoom y desplazarse. Exporta a HTML o incrusta en aplicaciones Dash.
Tarjeta de referencia rápida - lista para copiar y pegar.
import plotly.express as px
import pandas as pd
df = pd.read_csv("sales.csv", parse_dates=["ordered_at"])
fig = px.line(df, x="ordered_at", y="revenue", color="region", title="Tendencia de ingresos")
fig.update_layout(hovermode="x unified")
fig.write_html("revenue.html", include_plotlyjs="cdn")Cuándo usar esto:
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import numpy as np
rng = np.random.default_rng(42)
df = pd.DataFrame(
{
"region": np.repeat(["East", "West"], 100),
"month": np.tile(np.arange(1, 13).repeat(8)[:100], 2),
"revenue": rng.integers(80, 200, 200),
"units": rng.integers(5, 50, 200),
}
)
# Dispersión Express con hover personalizado
fig_scatter = px.scatter(
df,
x="units",
y="revenue",
color="region",
hover_data=["month"],
opacity=0.7,
title="Unidades vs ingresos",
)
fig_scatter.update_traces(marker=dict(size=8))
# Objetos de gráfico para combinación de doble eje
monthly = df.groupby(["month", "region"], observed=True)["revenue"].sum().reset_index()
fig_combo = go.Figure()
for region, sub in monthly.groupby("region"):
fig_combo.add_trace(
go.Scatter(x=sub["month"], y=sub["revenue"], mode="lines+markers", name=region)
)
fig_combo.update_layout(
xaxis_title="Mes",
yaxis_title="Ingresos",
legend_title="Región",
template="plotly_white",
)
fig_scatter.write_html("scatter.html", include_plotlyjs="cdn")
fig_combo.write_html("combo.html", include_plotlyjs="cdn")Lo que esto demuestra:
hover_datatemplate para un tema claro y coherente| Capa | Mejor para |
|---|---|
plotly.express | Gráficos estándar a partir de datos ordenados |
plotly.graph_objects | Diseños personalizados, ejes dobles, anotaciones |
import plotly.io as pio
# La exportación de imágenes estáticas requiere kaleido
pio.write_image(fig, "chart.png", scale=2)include_plotlyjs=True infla los archivos. Solución: usar "cdn" o "directory".astype(str) o category_orders.hovertemplate.write_image falla en CI. Solución: uv pip install kaleido en trabajos de exportación.| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| matplotlib | Pipelines estáticos de impresión/PDF | Necesita tooltips al pasar el ratón |
| Altair | Especificaciones declarativas de Vega-Lite | Necesita trazas WebGL 3D |
| Bokeh | Grandes conjuntos de datos en streaming | El equipo ya usa Plotly/Dash |
| Observable Plot | Gramática nativa de la web | Trabajos por lotes solo de Python |
fig.update_traces(hovertemplate="Ingresos: %{y:$,.0f}<extra></extra>")fig.show() se renderiza en línea con soporte para nbformat.fig.update_layout(legend_traceorder="reversed")fig.add_hline(y=150, line_dash="dash", annotation_text="objetivo")pl.DataFrame donde sea compatible o .to_pandas() primero.fig.update_layout(template="plotly_dark")fig.to_html(full_html=False) en las plantillas.px.scatter(..., animation_frame="year") para conjuntos de datos pequeños.Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026