plotly / plotly/plotly.js

[FEATURE]: minimum autorange window

オープン
#7,770 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

enhancement feature P3 size: 5
主要言語
JavaScript
スター
18.3k
フォーク
2k
平均マージ
2日 12時間
マージ済み PR(30日)
28

説明

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

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、既存の yaxis.autorangeoptions の処理、特に clipmin、clipmax、minallowed、maxallowed を追跡し、Plotly.extendTraces と Plotly.relayout がストリーミング時の autorange の動作にどのような影響を与えるかを確認します。API を定義し、データが設定された最小ウィンドウ内に収まっている場合は autorange がその最小ウィンドウを維持し、外れ値と既存の padding ルールを含めるのに十分な範囲まで拡張されることを検証します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript
領域
data-visualization
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。