FigureWidget update issues after single bin histogram.
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 18.8k
- Forks
- 2.8k
- Merge médio
- 16h 26min
- PRs com merge (30d)
- 21
Descrição
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.
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece reproduzindo FigureWidget e go.Histogram no JupyterLab, confirmando primeiro a sequência de atualização de dados variados para um array de um único bin e de volta. Rastreie como a alteração de FigureWidget.data[0].x atualiza os metadados dos bins e os intervalos dos eixos do histograma; está concluído quando o layout e as informações dos bins são recalculados para os novos dados, em vez de manter os valores do bin único.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- jupyter-notebook, numpy, python
- Domínio
- data-visualization
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100