plotly / plotly/plotly.js

[Feature Request] Add custom label anchor for Sankey graphs

Ouverte
#7,562 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature P3
Langage dominant
JavaScript
Étoiles
18.3k
Forks
2k
Merge moyen
2 j 12 h
PR mergées (30 j)
28

Description

Add the possibility to custom change the anchor of the node text

Current:

Image

After:

Image

Minimum example code:

import dash
from dash import dcc, html, Input, Output
import plotly.graph_objects as go

# Inicializa o app Dash
app = dash.Dash(__name__)
app.title = "Sankey Colorido"

# ----------- Sankey básico -------------
labels = ["A1", "A2", "B1", "B2", "C1", "C2"]
sources = [0, 1, 0, 2, 3, 3]
targets = [2, 3, 3, 4, 4, 5]
values  = [8, 4, 2, 8, 4, 2]

fig = go.Figure(go.Sankey(
    arrangement="snap",
    node=dict(
        pad=15,
        thickness=20,
        line=dict(color="black", width=0.5),
        label=labels,
        color="blue"
    ),
    link=dict(
        source=sources,
        target=targets,
        value=values
    )
))

fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)

# ----------- Layout Dash -------------
app.layout = html.Div([
    dcc.Graph(
        id="sankey-graph",
        figure=fig,
        style={"width":"100%", "height":"100vh"}
    )
])

# ----------- Client-side callback para alinhar labels -------------
# desloca horizontalmente e alinha à direita
app.clientside_callback(
    """
    function(figure) {
        setTimeout(() => {
            const labels = document.querySelectorAll('.sankey .node-label');
            labels.forEach(label => {
                const transform = label.getAttribute('transform');
                const match = /translate\\(([^,]+),([^)]+)\\)/.exec(transform);
                if(match){
                    const y = parseFloat(match[2]);
                    const x = -15; // deslocamento horizontal
                    label.setAttribute('transform', `translate(${x},${y})`);
                    label.setAttribute('text-anchor','end'); // alinhamento à direita
                }
            });
        }, 500); // espera renderização
        return figure;
    }
    """,
    Output('sankey-graph', 'figure'),
    Input('sankey-graph', 'figure')
)

if __name__ == "__main__":
    app.run(debug=True)


The clientside_callback is replaced after user interaction with the graph

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

L’issue ne nomme aucun fichier du dépôt ni aucun test. Commencez par suivre le rendu des libellés des nœuds Sankey dans plotly.js et comparez-le avec le contournement utilisant un callback clientside ; le travail sera terminé lorsqu’un ancrage de libellé personnalisé pris en charge résistera aux interactions avec le graphique sans ce contournement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript
Domaine
data-visualization
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.