Performance issues with many traces compared to single traces
Offen
Dieses Issue hat noch niemand übernommen.
cs
P1
- Vorherrschende Sprache
- JavaScript
- Sterne
- 18.3k
- Forks
- 2k
- Ø Merge
- 2 T. 12 Std.
- Gemergte PRs (30 T.)
- 28
Beschreibung
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()
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.