FigureWidget update issues after single bin histogram.
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 18.8k
- 派生
- 2.8k
- 平均合并
- 16 小时 26 分钟
- 30 天内合并 PR
- 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 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从在 JupyterLab 中复现 FigureWidget 和 go.Histogram 开始,首先确认从不同数据到单 bin 数组再返回的更新顺序。跟踪更改 FigureWidget.data[0].x 如何更新直方图 bin 元数据和坐标轴范围;完成的标准是针对新数据重新计算 layout 和 bin 信息,而不是保留单 bin 的值。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- jupyter-notebook, numpy, python
- 领域
- data-visualization
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100