plotly / plotly/plotly.js

redraw <chart type> with no changes is not a noop (svg mocks)

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

Personne n'a encore pris cette issue.

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

Description

  • We traced it back to 2.24.0 (https://github.com/plotly/plotly.js/releases/tag/v2.24.0), which includes a group of PR's that correspond to the exact same figure types that are failing. For example, in the sunburst PR, there's a line that updates the trace marker color.
  • From @alexcjohnson:
    • In sunburst/style.js (which is part of the plotting pipeline) we have
    if(marker.pattern) {
        if(!marker.colors || !marker.pattern.shape) marker.color = cdi.color;
    } else {
        marker.color = cdi.color;
    }
    
    • ie we’re changing _fullData during plotting. Which is a big no no. So yeah that’s where the noop is being broken, we should avoid that, which I bet in this case means creating a new mock trace object to pass into Drawing.pointStyle(s, trace, gd, pt); rather than modifying this one. But of course since this has been around for a year and a half, this is not a release blocker.
    • Also I’ll note, the code in question is in styleOne, meaning that it’ll be called once for every segment of the sunburst… so if you do go with a mock trace object, put the object creation up in style (which only happens once per trace) instead of in styleOne, and styleOne can keep reusing that same object.
      If it helps, you’re free to attach new things to the trace object during plotting as long as they start with _.
    • I’m thinking about things like here where we mock an axis in order to reuse logic from regular axis handling in 3D axes… or here where we mock the entire figure in the course of making a new shrunken version of the figure for rangesliders
  • Update after looking into it a bit: The code referenced above is now is fill_one.js. Added in this commit

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

Commencez dans fill_one.js et suivez le chemin style/styleOne jusqu’à Drawing.pointStyle(s, trace, gd, pt). Vérifiez comment les mocks SVG et fullData sont gérés lors des redraws, en particulier pour les types de graphiques concernés. C’est terminé lorsqu’un redraw d’un graphique inchangé laisse les données sous-jacentes intactes et se comporte comme un noop.

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

Évaluation

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

Recevez les nouvelles issues par e-mail

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