Scattergl points disappear when reaching a certain threshold in size difference
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
I noticed, that in Scattergl points start to disappear from the graph when resizing and reaching certain thresholds in size difference.
Minimal example:
from dash import Dash, html, dcc, callback
from dash.dependencies import Input, Output
import plotly.graph_objects as go
from plotly.graph_objs import Scattergl
import numpy as np
import pandas as pd
np.random.seed(41)
x = np.random.uniform(-10, 10, 10)
y = np.random.uniform(-10, 10, 10)
sizes = np.random.uniform(0, 1000, 10)
df = pd.DataFrame({
'x': x,
'y': y,
'sizes': sizes
})
app = Dash(__name__)
app.layout = html.Div([
dcc.Slider(min=13, max=14, value=1, id='slider-sizes', step=0.1),
dcc.Graph(id='graph', style={"width": "100vw", "height": "80vh"}),
])
def update_marker_sizes(fig, size):
for trace in fig.data:
if 'marker' in trace and 'size' in trace.marker:
trace.marker.size = [s * size for s in trace.marker.size]
return fig
@callback(
Output('graph', 'figure'),
Input('slider-sizes', 'value')
)
def update_graph(size):
figure = go.Figure(data=Scattergl(x=df["x"], y=df["y"], mode='markers',
marker=dict(size=df['sizes']*size, sizemode='area')))
print(f"{50*'-'}\nslider size:{size}")
num_points = sum(
len(trace['x']) for trace in figure.full_figure_for_development()['data'] if
len(trace["x"]) > 1)
print(f"num points in dev data (x): {num_points}")
minsize, maxsize = float("inf"), float("-inf")
for trace in figure.data:
if hasattr(trace, 'marker') and hasattr(trace.marker, 'size'):
if len(trace.marker.size) > 1:
print(f"num points in data: {len(trace.marker.size)}")
minsize = min(minsize, min(trace.marker.size))
maxsize = max(maxsize, max(trace.marker.size))
print(f"min: {minsize}, max: {maxsize}, diff: {maxsize - minsize}")
return figure
if __name__ == '__main__':
app.run_server(debug=True, port=8000)
The points are still present in the underlying data structure:
Output:
--------------------------------------------------
slider size:13.5
num points in dev data (x): 10
num points in data: 10
min: 1350.4235691765416, max: 10008.250444470288, diff: 8657.826875293747
--------------------------------------------------
slider size:13.6
num points in dev data (x): 10
num points in data: 10
min: 1360.4267067259975, max: 10082.385632947846, diff: 8721.958926221849
--------------------------------------------------
slider size:13.5
num points in dev data (x): 10
num points in data: 10
min: 1350.4235691765416, max: 10008.250444470288, diff: 8657.826875293747
--------------------------------------------------
Visually, this is what happens:
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 ejecutando el ejemplo mínimo de Dash del issue y variando el slider alrededor de los umbrales de tamaño reportados. Sigue la ruta de renderizado de Scattergl para determinar por qué desaparecen puntos aunque sigan presentes en los datos y, a continuación, verifica que todos los puntos permanezcan visibles en todo el rango de tamaños que reproduce el problema.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- 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