Lors de l'utilisation de la disposition de force dans d3.js, il est possible de repousser les noeuds à l'aide de la force de collision en augmentant un rayon imaginaire entourant les noeuds.Modifier le comportement de collision de nombreux noeuds stockés dans un tableau
J'ai créé un bouton séparé nommé button
et je veux utiliser .data()
(pour sélectionner un tableau entier) pour augmenter le rayon de collision dans 40 de nombreux nœuds lorsque vous cliquez sur ce bouton. Par exemple, quand un certain nombre filtré de noeuds est stocké dans un tableau appelé abc
, j'ai essayé ce code:
var node =......
.on("click", function(d, i)
{
abc = start && start.path(d) || [];
node.style("fill", function(n)
{
if (n == start) {
return "yellow";
} else if (n == d){
return "green"
}
else if (abc.includes(n)){
return "red"
}
else {
return "lightgrey"
}
.....
});
button.on("click", function(d) {
d3.selectAll("circle").data().forEach(d => d.r = 6);
d3.select(abc).data().r = 40;
simulation.nodes(data);
simulation.alpha(0.8).restart();
})
Je suis en mesure de cliquer sur 2 nœuds et stocker ces 2 noeuds et tous les nœuds entre eux dans le tableau abc
. Ceci est possible avec l'aide de la fonction d3.js path()
qui renvoie le chemin le plus court entre 2 nœuds.
Mais malheureusement, cela ne fonctionne pas. Peut-être qu'il y a quelqu'un qui peut m'aider avec le problème. L'idée de base de repousser les nœuds est déjà discutée ici: Using the force-layout physics for seperated elements Merci beaucoup!
Vous voulez dire des citations dans cette ligne? 'd3.select (" abc "). data(). r = 40;'? –
Oui. Êtes-vous en train de sélectionner un tag? Je ne le crois pas. Veuillez également spécifier comment abc est créé. –
Je viens d'éditer le code. –