plotly / plotly/plotly.js

[FEATURE]: minimum autorange window

Offen
#7,770 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

enhancement feature P3 size: 5
Vorherrschende Sprache
JavaScript
Sterne
18.3k
Forks
2k
Ø Merge
2 T. 12 Std.
Gemergte PRs (30 T.)
28

Beschreibung

Feature request: “minimum autorange window” (default range, expand only when data exceed bounds) for live graphs

Problem / Motivation

We are building a live (streaming) graph with Plotly.js. When using autorange: true, the y-axis can become too tightly zoomed around very small values. This makes it hard to follow the signal comfortably because the scale constantly re-adjusts to tiny changes.

At the same time, we need to see outliers immediately: if a value suddenly exceeds a threshold, the plot should expand so the outlier is visible and operators can react.

So we want a y-axis behavior like:

  • Default to a “stable” range (e.g. [-10, 10]) while data stay inside it (prevents over-zooming).
  • If any new data point goes below -10 or above 10, automatically expand the axis beyond that window (so outliers are visible).
  • In other words: do not shrink inside the window, but do expand outside of it.

Why current options don’t solve it

  • layout.yaxis.autorangeoptions.clipmin/clipmax cap the autorange result.
    They prevent the axis from expanding beyond the clip values, which is the opposite of what we need (we want expansion beyond the threshold).
  • autorangeoptions.minallowed/maxallowed (and axis-level allowed options) are hard limits / exact values and also do not provide “minimum window but expandable”.
  • The current workaround is to compute data min/max and call Plotly.relayout() repeatedly, but this creates boilerplate, can fight user interactions, and is easy to get wrong for multi-axis / overlay cases.

Proposed feature

Add an autorange option that enforces a minimum visible window while still allowing expansion when data exceed the window.

Possible API (one of these, open to better naming):

  • yaxis.autorangeoptions.minwindow: [-10, 10]
  • yaxis.autorangeoptions.minrange: 20 (minimum span)
  • or similar
Proposed semantics

When autorange: true:

  1. Compute normal autorange [amin, amax] from data (with existing padding rules).
  2. Enforce: the final range must include the data, and must be at least the configured minimum window/span.
    • If data are within the minimum window, use the minimum window exactly (stable view).
    • If data exceed the window, expand as needed to include the data (outliers become visible).
Examples

Given minwindow: [-10, 10]:

  • data in [-3, 5] -> range should be [-10, 10]
  • data in [-12, 5] -> range should expand to include -12 (e.g. [-12, 10] plus padding if applicable)
  • data in [-3, 22] -> range should expand to include 22

Minimal reproduction / demonstration

Current behavior with autorange: true in a streaming graph:

  • when values are close to 0, the axis zooms too tightly and keeps changing scale, making the chart hard to read.

Desired behavior:

  • keep a stable default range (e.g. [-10, 10]) until thresholds are exceeded, then expand.

(If maintainers want, I can provide a CodePen reproducing the streaming case using Plotly.extendTraces.)

Additional notes

This feature would be especially valuable for:

  • live monitoring dashboards
  • industrial / IoT telemetry
  • finance signals with mostly small fluctuations but occasional spikes

It’s conceptually related to clipmin/clipmax, but with inverse behavior:

  • clip* = “don’t expand past these limits”
  • minwindow = “don’t shrink inside these limits, but expand past them when necessary”
  • or you can add more values in autorangeoptions: include

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

Beginne damit, die bestehende Verarbeitung von yaxis.autorangeoptions nachzuverfolgen, insbesondere clipmin, clipmax, minallowed und maxallowed, und prüfe, wie Plotly.extendTraces und Plotly.relayout das autorange-Verhalten beim Streaming beeinflussen. Definiere die API und verifiziere, dass autorange das konfigurierte Mindestfenster beibehält, wenn die Daten innerhalb dieses Fensters bleiben, und es ausreichend erweitert, um Ausreißer sowie bestehende Padding-Regeln einzuschließen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript
Bereich
data-visualization
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

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