FigureWidget update issues after single bin histogram.
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 18.8k
- フォーク
- 2.8k
- 平均マージ
- 16時間 26分
- マージ済み PR(30日)
- 21
説明
Running into an (admittedly quite edgy) issue updating a plotly graph_object Histogram in a FigureWidget.
The issue only seems to arise when using barmode='overlay' and seems to result from updating .data[0].x to a degenerative
(single bin) array (i.e. all elements equal).
Running in Jupyterlab the issue can be reproduced by:
import plotly.graph_objects as go
import numpy as np
hist_wgt = go.FigureWidget([go.Histogram(x=np.random.random(200), histnorm='probability', opacity=0.7)],
layout=dict(barmode='overlay'))
display(hist_wgt)
which produces a nicely binned histogram e.g.
and
print("xrange:", hist_wgt.layout.xaxis.range)
print("nbinsx:", hist_wgt.data[0].nbinsx)
print("yrange:",hist_wgt.layout.yaxis.range)
print("start:", hist_wgt.data[0].xbins.start)
print("end:", hist_wgt.data[0].xbins.end)
print("size:", hist_wgt.data[0].xbins.size)
xrange: (6.938893903907228e-17, 0.9999999999999999)
nbinsx: 0
yrange: (0, 0.1736842105263158)
start: 0
end: 1
size: 0.1
However, if we update hist_wgt.data[0].x with a (terrible) uniform array:
hist_wgt.data[0].x = np.ones(200)
the histogram becomes a single bin (as expected):
and the layout and bin info:
xrange: (0.5, 1.5)
nbinsx: 0
yrange: (0, 1.0526315789473684)
start: 0.5
end: 1.5
size: 1
The issue now happens when we try to update hist_wgt.data[0].x, but with with a more sensible array:
hist_wgt.data[0].x = np.random.random(200) * 1e6
it seems the widget layout is not re-evaluated or updated for this new x:
although nbinsx does get set to None (unsure if this is significant):
xrange: (0.5, 1.5)
nbinsx: None
yrange: (0, 1.0526315789473684)
start: 0.5
end: 1.5
size: 1
My guess is that the ambiguous nature of bin-width where the data range is 0 means that something is being set for the widget layout for that special case -- and then this setting overrides any later auto-range operations?
I am happy to admit that trying to plot a single bin histogram is slightly pointless but I want the histogram to be updatable for user selected variables, some of which could could collapse to a single value. I have tried to find an option to force the layout update through but haven't stumble upon the right combination of calls.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず JupyterLab で FigureWidget と go.Histogram の再現から始め、異なるデータから単一ビンの配列へ、そして元に戻る更新シーケンスを確認します。FigureWidget.data[0].x の変更によってヒストグラムのビンメタデータと軸範囲がどのように更新されるかを追跡します。新しいデータに対してレイアウトとビン情報が再計算され、単一ビンの値が保持されなければ完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- jupyter-notebook, numpy, python
- 領域
- data-visualization
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100