71 votes

Fixer la position du nœud dans la disposition D3 dirigée par la force

Je veux quelques noeuds dans ma force dirigée mise en page d'ignorer la force et de rester dans des positions fixes basée sur l'attribut du nœud, tout en étant capable de glisser et d'exercer une répulsion sur les autres nœuds et de maintenir leurs lignes de liaison. Je pensais que ça allait être aussi simple que cela:

    force.on("tick", function() {
        vis.selectAll("g.node")
            .attr("transform", function(d) {
                return (d.someAttribute == true) ?
                    "translate(" + d.xcoordFromAttribute + "," + d.ycoordFromAttribute +")" :
                    "translate(" + d.x + "," + d.y + ")"
            });
     });

J'ai également essayé de définir manuellement le nœud x et y des attributs sur-tique, mais alors les liens continuent de flotter hors de où le nœud serait si elle a été affectée par la force.

Évidemment, j'ai une base de l'incompréhension de la façon dont cela est censé fonctionner, si quelqu'un pourrait m'indiquer un exemple où certains nœuds sont fixés dans leur position (mais toujours déplaçables) et le reste des nœuds sont flottant autour de la force-directed-like, et tous les liens sont encore au travail?

80voto

mbostock Points 25336

Ensemble d.fixed sur les nœuds de vrai, et initialiser d.x et d.y à la position désirée. Ces nœuds puis encore faire partie de la simulation, et vous pouvez utiliser l'affichage normal de code (par exemple, la fixation d'un attribut transform); cependant, parce qu'ils sont marqués comme étant fixe, ils ne peuvent être déplacés par glisser-et non pas par la simulation.

Voir la force de mise en page de la documentation pour plus de détails, et de voir aussi comment le nœud racine est positionné dans cet exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X