plotly / plotly/plotly.js

Pie Chart Misalignment Issue when resizing the browser window

Abierto
#5,802 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug P3
Lenguaje dominante
JavaScript
Estrellas
18.3k
Forks
2k
Merge medio
2 d 12 h
PR fusionados (30 d)
28

Descripción

A misalignment issue was observed when resizing on a donut pie chart. The centers of the circles are misaligned after resizing the browser window.(multiple times of resizing are needed to reproduce this issue)

The original nest pie chat:(linke to codepen: https://codepen.io/runqi-han/pen/JjNGQZx)
image

After resizing the browser n times (n>10)
image

The issue can be removed by removing textinfo='none' property in the pie chat.

Below is the code used to reproduce the graph(with Dash).

import dash
import dash_design_kit as ddk
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import plotly.graph_objs as go
import numpy as np  
import random 

app = dash.Dash(__name__)
groups = ["Device Drivers", "Computing Resources", "Peripheral Configuration", "New Devices"]
fig = go.Figure()

holes = [0.2, 0.5, 2/3, 0.75]
domain = [[0.4, 0.6], [0.3, 0.7], [0.2, 0.8], [0.1, 0.9]]
prob = np.random.random(len(groups))
prob = prob/sum(prob)
prob = sorted(prob)
direction = "clockwise"
for i in range(0, len(prob)):
    count = random.randint(250, 500)
    data = [prob[i], 1 - prob[i]]
    soft_type = groups[i]
    trace = go.Pie(
        hole=holes[i],
        domain={"x": domain[i],
                "y": domain[i]},
        values=data,
        direction=direction,
        sort=False,
        hovertext=[int(count*prob[i]), int(count*(1-prob[i]))],
        hoverinfo="label+percent",
        labels=[f"Owned {str.capitalize(soft_type)} ({int(count*prob[i])})",
                f"Other {str.capitalize(soft_type)} ({int(count*(1-prob[i]))})",
                ],
        textinfo='none',
        #textfont_color='white',
        textposition='outside',
        marker={'line': {'color': 'white', 'width': 5}},
        showlegend=True
    )
    direction = "counterclockwise" if direction == "clockwise" else "clockwise"
    fig.add_trace(trace)
fig.update_layout(
    legend=dict(
        orientation="h",
        yanchor="bottom",
        y=-0.45,
        xanchor="left",
        x=0,
        itemclick="toggle"
    ),
    showlegend=True,
)

app.layout = ddk.App([
    ddk.Row(children=[
        ddk.Card(width=100, children=ddk.Graph(figure=fig)),
    ])
])


if __name__ == '__main__':
    app.run_server(debug=True)

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 la reproducción de Dash proporcionada y el CodePen enlazado; luego cambia repetidamente el tamaño del navegador con trazas de pie anidadas usando textinfo='none'. Compara los centros de los círculos antes y después de cambiar el tamaño y verifica que los centros sigan alineados, manteniendo al mismo tiempo el comportamiento del gráfico informado.

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

Evaluación

Stack tecnológico
javascript, 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
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.