Sto iniziando con d3.js e sto provando a creare una fila di nodi ognuno dei quali contiene un'etichetta con il numero centrato.Posizionamento delle etichette al centro dei nodi in d3.js
Sono in grado di produrre visivamente il risultato desiderato, ma il modo in cui l'ho fatto è difficilmente ottimale in quanto implica la codifica hard delle coordinate x-y per ciascun elemento di testo. Di seguito è riportato il codice:
var svg_w = 800;
var svg_h = 400;
var svg = d3.select("body")
.append("svg")
.attr("width", svg_w)
.attr("weight", svg_h);
var dataset = [];
for (var i = 0; i < 6; i++) {
var datum = 10 + Math.round(Math.random() * 20);
dataset.push(datum);
}
var nodes = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("class", "node")
.attr("cx", function(d, i) {
return (i * 70) + 50;
})
.attr("cy", svg_h/2)
.attr("r", 20);
var labels = svg.append("g")
.attr("class", "labels")
.selectAll("text")
.data(dataset)
.enter()
.append("text")
.attr("dx", function(d, i) {
return (i * 70) + 42
})
.attr("dy", svg_h/2 + 5)
.text(function(d) {
return d;
});
Il node
classe è classe CSS personalizzata ho definito separatamente per i circle
elementi, mentre le classi nodes
e labels
non sono esplicitamente definiti e sono presi in prestito da questo answer.
Come visto, il posizionamento di ciascuna etichetta di testo è hardcoded in modo che appaia al centro di ciascun nodo. Ovviamente, questa non è la soluzione giusta.
La mia domanda è che come dovrei associare correttamente ogni etichetta di testo a ogni cerchio di nodi dinamicamente in modo che se il posizionamento di un'etichetta cambia insieme a quello di un cerchio automaticamente. La spiegazione concettuale è estremamente gradita nell'esempio di codice.
ancoraggi di testo sembrano non funzionare direttamente in D3 ancora, ma ha fatto si è tentato qualcosa di semplice come CSS text-align? Questo dovrebbe fare il trucco! http://www.w3schools.com/cssref/pr_text_text-align.asp Prova anche a dare un'occhiata ai post di questo tipo dal gruppo Google d3: https://groups.google.com/forum/#!searchin/d3 -js/text-align/d3-js/M6a-97ajkWs/rHJV4_WrhX0J% 5B1-25% 5D – paxRoman
Dove ti viene l'idea che gli ancoraggi di testo non funzionano in d3? –
pochi mesi fa non hanno funzionato ... grazie per il chiarimento :) bello vedere un approccio semplice a questo problema – paxRoman