Déterminer les changements d'état du graphique Sunburst de Plotly.js
P粉659516906
2023-08-31 20:42:38
<p>J'ai une application React dans laquelle j'utilise plotly.js pour afficher un graphique sunburst. J'ai d'autres actions/composants qui changent en fonction de « l'état de zoom » du graphique sunburst. Par exemple, si je fais un zoom arrière complet, le graphique en rafale affiche 4 cercles concentriques. Si je clique sur le deuxième cercle à partir du centre, il effectue un zoom avant et il n'y a alors que 3 cercles concentriques. Je pensais pouvoir déterminer le statut via un gestionnaire de clics, mais cela ne semble pas simple. </p>
<p>L'état qui m'intéresse est en fait ce qui est visible et à quelle profondeur (combien de cercles concentriques y a-t-il). </p>
<p>J'espérais trouver des rappels ou quelque chose qui reflète l'état, mais tout ce que j'ai trouvé était un gestionnaire de clics pour le graphique sunburst (référence https://github.com/plotly/react-plotly.js/blob / master/README.md#event-handler-props-onSunburstClick, https://community.plotly.com/t/capturing-sunburst-on-click-events/32171)</p>
<p>Le problème est qu'il est difficile de déduire l'état à partir des clics. Cliquer sur un paragraphe change d'état de différentes manières. Si je clique sur le paragraphe le plus à l’extérieur, cela ne change pas du tout d’état. Si je clique sur le cercle le plus intérieur, il peut effectuer un zoom avant ou arrière en fonction du paragraphe actuellement affiché dans le cercle le plus intérieur. </p>
<p> Quelqu'un sur codepen a un exemple basé sur ce code : </p>
<pre class="brush:php;toolbar:false;">Plotly.newPlot('graph', [{
tapez : 'soleil',
parents : ['', 'Root', 'Root', 'A'],
étiquettes : ['Racine', 'A', 'B', 'a']
}]).then(gd => {
gd.on('plotly_sunburstclick', console.log)
})</pré>
<p>Si vous y allez et cliquez sur « A », vous entrerez dans un état où « A » est le cercle central et « a » est le cercle extérieur. Si vous cliquez à nouveau sur « A », vous obtiendrez « racine » comme cercle central. Pour le gestionnaire de clics, les deux clics se ressemblent fondamentalement, mais le statut résultant (qui est la partie qui m'intéresse) est différent. Dans mon cas, j'ai essayé quelques heuristiques pour déduire s'il s'agissait d'une augmentation ou d'une diminution, mais rien de ce que j'ai essayé n'a fonctionné de manière cohérente. </p>
<p>J'ai cherché une solution, mais la chose la plus proche que j'ai trouvée jusqu'à présent est un gestionnaire de clics qui, après quelques efforts, n'a pas résolu mon problème. S'il y a déjà une réponse, c'est très bien, mais ne marquez pas trop rapidement une question comme doublon sans être sûr qu'elle a déjà été résolue. Je vois beaucoup de questions marquées comme doublons où les réponses mentionnées ne répondent pas réellement à la nouvelle question, tandis que la discussion et toute tentative de réponse à la question réelle sont effectivement fermées. </p>
<p> Je dois ajouter que je ne dois pas nécessairement utiliser plotly.js, et s'il existe d'autres bibliothèques pour React qui pourraient résoudre mon problème, je suis ouvert aux suggestions. </p>
Dans ce cas, l'événement click déclenche finalement un comportement similaire à un "switch".
Par défaut, nous voyons le nœud racine et tous les nœuds enfants de la hiérarchie.
Cliquer sur un anneau avec au moins un nœud enfant (par exemple « A ») filtrera son nœud parent (« Racine ») et son nœud frère (« B ») et traitera visuellement l'anneau comme le nouveau nœud racine, nous seulement la hiérarchie sous l'anneau est visible (c'est-à-dire que le commutateur de filtrage en anneau est activé et l'attribut
nextLevel
dans les données d'événement est défini sur « A » en conséquence, par exemple « A est le nouveau nœud racine »).Cliquer à nouveau sur l'anneau - maintenant l'anneau le plus intérieur - désactive le filtre et les nœuds parents et frères réapparaissent,
nextLevel
réglés sur « Root ».Cliquer sur un anneau sans nœud enfant (par exemple « a » ou « B ») n'a aucun effet, donc dans ce cas
nextLevel
n'est pas défini.En fait, les propriétés
nextLevel
reflètent les changements d'état.Maintenant, pour mieux comprendre ce qui se passe dans le gestionnaire de clics, vous souhaiterez peut-être vérifier
currentpath
(ou une version légèrement modifiée pour plus de cohérence) et la présence/valeur decurrentpath
(或为了一致性,稍微调整过的版本)以及nextLevel
: