plotly / plotly/plotly.py

go.Scatter ignores the masked array elements in numpy masked arrays

Abierto
#4,213 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug P3
Lenguaje dominante
Python
Estrellas
18.8k
Forks
2.8k
Merge medio
16 h 26 min
PR fusionados (30 d)
21

Descripción

Bug summary

Plotting a numpy masked array, px.scatter plots the non-masked array elements and limits the axis accordingly, while go.Scatter also displays the masked data and does also include the masked elements for the axis limits. The behavior from go.Scatter is unexpected in this regard and ignoring the mask defeats the purpose of masked arrays.

Minimal viable code

import numpy.ma as ma
import plotly.express as px
import plotly.graph_objects as go

# Create timestamps
time_unmasked = [1,2,3,4,5,6,7]

# Create a masked array with three masked variables, one datapoint far from others
data_masked = ma.array([15,14,50,15,15,15,16], mask=[0,0,1,1,1,0,0])

fig_px = px.scatter(x=time_unmasked, y=data_masked, title='Plotly Express')
fig_px.show()

fig_go = go.Figure(layout=go.Layout(
        title=go.layout.Title(text="Plotly Graph Objects")))
fig_go.add_trace(go.Scatter(x=time_unmasked, y=data_masked))
fig_go.show()

Thanks to @Benblob688 for his code example in the issue mentioned below.

Actual outcome
newplot
Using plotly.graph_objects, the masked data entries at position 2,3,4 with the values 50,15,15 are drawn into the plot and the axis limits are set accordingly.
Expected outcome
newplot (1)
Using plotly.express, the masked data entries are not shown and the axis limits are set accordingly to only include non-masked entries in the array.

Additional information
Matplotlib had a similar issue here, where the code has been adapted from to display this issue here. It seems that the usage of np.column_stack caused an issue there, that function has since been replaced with np.ma.column_stack.

Operating system

Ubuntu 20.04

Plotly Version

5.14.1
Numpy Version
1.24.1
Python version

3.11.3
Installation

conda

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el ejemplo de código mínimo y compara px.scatter con go.Scatter cuando se les proporciona el array de NumPy enmascarado. Sigue cómo cada punto de entrada gestiona los elementos enmascarados y los límites de los ejes, y añade o actualiza la cobertura del ejemplo reportado. Se considera terminado cuando go.Scatter deja de dibujar los valores enmascarados y de incluirlos en los límites de los ejes.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
numpy, python
Área
data-visualization
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.