FigureWidget update issues after single bin histogram.
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 18.8k
- Forks
- 2.8k
- Merge medio
- 16 h 26 min
- PR fusionados (30 d)
- 21
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la reproducción de FigureWidget y go.Histogram en JupyterLab, confirmando primero la secuencia de actualización desde datos variados hasta un array de un solo bin y de vuelta. Rastrea cómo cambiar FigureWidget.data[0].x actualiza los metadatos de los bins y los rangos de los ejes del histograma; se considera terminado cuando el layout y la información de los bins se recalculan para los nuevos datos, en lugar de conservar los valores del bin único.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- jupyter-notebook, numpy, python
- Área
- data-visualization
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100