Performance issues with many traces compared to single traces
Abierto
Nadie ha tomado este issue todavía.
cs
P1
- Lenguaje dominante
- JavaScript
- Estrellas
- 18.3k
- Forks
- 2k
- Merge medio
- 2 d 12 h
- PR fusionados (30 d)
- 28
Descripción
Today, Plotly.js starts to stumble when generating charts with many traces, even if the total number of points is the same. This is a Python example but I believe it boils down to plotly.js.
The performance difference is stark (M4 MacBook Air):
python 100k_traces_1_point_each.py
=== Testing 100k traces with 1 point each ===
Generating data for 100k traces with 1 point each...
Data generation took: 8.78 seconds
Creating plot...
Plot creation took: 2.47 seconds
Total time: 11.25 seconds
=== Testing 1 trace with 100k points ===
Generating data for 1 trace with 100k points...
Data generation took: 0.00 seconds
Creating plot...
Plot creation took: 0.55 seconds
Total time: 0.55 seconds
Reproduce:
import plotly.graph_objects as go
import numpy as np
import time
def test_100k_traces_1_point():
print("=== Testing 100k traces with 1 point each ===")
print("Generating data for 100k traces with 1 point each...")
start_time = time.time()
traces = []
for i in range(100000):
traces.append(go.Scatter(
x=[np.random.rand()],
y=[np.random.rand()],
mode='markers',
name=f'Trace {i}',
showlegend=False
))
data_gen_time = time.time() - start_time
print(f"Data generation took: {data_gen_time:.2f} seconds")
fig = go.Figure(data=traces)
fig.update_layout(
title="100k Traces - 1 Point Each (100k total points)",
xaxis_title="X Axis",
yaxis_title="Y Axis"
)
print("Creating plot...")
start_time = time.time()
fig.show()
plot_time = time.time() - start_time
print(f"Plot creation took: {plot_time:.2f} seconds")
print(f"Total time: {data_gen_time + plot_time:.2f} seconds")
def test_1_trace_100k_points():
print("\n=== Testing 1 trace with 100k points ===")
print("Generating data for 1 trace with 100k points...")
start_time = time.time()
x_data = np.random.rand(100000)
y_data = np.random.rand(100000)
data_gen_time = time.time() - start_time
print(f"Data generation took: {data_gen_time:.2f} seconds")
trace = go.Scatter(
x=x_data,
y=y_data,
mode='markers',
name='Single Trace - 100k Points',
marker=dict(size=2)
)
fig = go.Figure(data=[trace])
fig.update_layout(
title="1 Trace - 100k Points",
xaxis_title="X Axis",
yaxis_title="Y Axis"
)
print("Creating plot...")
start_time = time.time()
fig.show()
plot_time = time.time() - start_time
print(f"Plot creation took: {plot_time:.2f} seconds")
print(f"Total time: {data_gen_time + plot_time:.2f} seconds")
if __name__ == "__main__":
test_100k_traces_1_point()
test_1_trace_100k_points()
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Evaluación
Este issue todavía no se ha evaluado.