plotly / plotly/plotly.js

Scattergl freezes when y values have lots of zeros

Aperta
#6,792 3 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug P2 performance sev-2
Lingua principale
JavaScript
Stelle
18.3k
Fork
2k
Merge medio
2g 12h
PR unite (30g)
28

Descrizione

This might be more to do with plotly.js or plotly.py, but I only have dash code to generate the plot so I am posting here. I do a lot of time series plotting for my work, so Scattergl comes in handy because I routinely plot 1000's of points on a trace. After updating to dash 1.21.0, I noticed the Scattergl plots hang on hovering when my trace has lots of consecutive zero y-values. In most cases the hover event will freeze the entire page and I need to close and reopen the page.

EDIT: I pinpointed this error to the upgrade from plotly.js v2.0.0-rc.1 to plotly.js v2.0.0-rc.2. If you put rc.1 in the assets folder, scattergl works fast like in the previous version of dash. If you put rc.2 in the assets folder, the issues return.

I am not a js developer, so I don't know how best to move this issue over to plotly.js with equivalent js example. Nevertheless, I looked the difference in rc.1 and rc.2 changelogs and found that in rc.2 there is an additional reference to scattergl: Improve scattergl performance when using typed arrays #5632, maybe that is causing the issue?

Check the code below for an example:

import plotly.graph_objects as go
import numpy as np
import dash
import dash_core_components as dcc
import pandas as pd
import random

# build dataset
N = 200000
index = pd.date_range("7/1/2020", "7/1/2021", N)
vals = np.zeros(N)

# add some random non-zero data around the dataset
for i in range(50):
    start = random.randint(0, N - 50)
    vals[start : start + 50] = np.random.random(50)

# uncomment this line and see how Scattergl is much faster without the consecutive zeros
# vals = np.random.random(N)


# change Scattergl to Scatter to see how Scatter performs better with consecutive zeros
fig = go.Figure()
fig.add_trace(
    go.Scattergl(
        x=index,
        y=vals,
    )
)

app = dash.Dash()
app.layout = dcc.Graph(figure=fig)

if __name__ == "__main__":
    app.run_server(host="0.0.0.0", port=8080, debug=True)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo la riproduzione fornita in Dash/Python con 200.000 punti e valori y consecutivi uguali a zero, quindi confronta plotly.js v2.0.0-rc.1 con v2.0.0-rc.2. Leggi le modifiche relative a scattergl in PR #5632; il lavoro è completo quando il passaggio del mouse non blocca più la pagina per il modello di dati segnalato e il comportamento esistente di Scattergl rimane intatto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, python
Ambito
data-visualization, performance
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.