plotly / plotly/plotly.py

px.line erratic and wrong for large x value ranges

Offen
#4,655 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug P3
Vorherrschende Sprache
Python
Sterne
18.8k
Forks
2.8k
Ø Merge
16 Std. 26 Min.
Gemergte PRs (30 T.)
21

Beschreibung

Problem

Plotting a straight line from ($-X$, 0) to ($+X$, 1) for various (large) $X$ within a much smaller window results in wrong and inconsistent behavior, as demonstrated in below minimum non-working examples (using a Jupyter notebook with plotly.js v2.27.0).

I doubt that this behavior can be explained by intrinsic rounding problems, since

>>> np.interp([-0.1,0.1],[-1e17,+1e17],[0,1])
array([0.5, 0.5])

>>> np.interp([-0.1,0.1],[-1e18,+1e18],[0,1])
array([0.5, 0.5])

Examples

Data frame

df = pd.DataFrame(dict(x=[-1e17,+1e17,-1e18,+1e18],
                       y=[0,1,0,1],
                       xlimit=['±1e17','±1e17','±1e18','±1e18']))

Very tight plotting range (symmetric 0.1)

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-.1,.1],
              range_y=[0.4,0.6],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

pxLine_0_1

Slightly wider plotting range (symmetric 0.3)

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-.3,.3],
              range_y=[0.4,0.6],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

pxLine_0_3

Another plotting range (symmetric 1)

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-1,1],
              range_y=[0.4,0.6],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

pxLine_1

Another even wider plotting range (symmetric 3)

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-3,3],
              range_y=[0.4,0.6],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

pxLine_3

Apparently wide enough plotting range (symmetric 3.2)

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-3.2,3.2],
              range_y=[0.4,0.6],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

pxLine_3_2

As far as my tests go, for any range_x that is wider than about ±3, the plotting is rendered correctly:

fig = px.line(df,x='x',y='y',color='xlimit',
              range_x=[-1e17,1e17],
              range_y=[0,1],
              width=400,
              height=400,)
fig.update_traces(opacity=0.5)
fig.show()

px_Line_full

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Problem in einem Jupyter-Notebook mit px.line, dem bereitgestellten DataFrame, kleinen range_x-Werten und plotly.js v2.27.0. Vergleiche die gerenderten Linien über die Beispielbereiche hinweg und verfolge, ob das Verhalten im plotly.py px.line-Pfad oder beim plotly.js-Rendering entsteht; abgeschlossen ist die Untersuchung, wenn die Linien für große Bereiche in den bereitgestellten Fällen konsistent gerendert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, jupyter-notebook, python
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.