Attualmente ho un grafico che ha valori di barra associati visualizzati sopra ogni barra, ma ho difficoltà a centrare le etichette dei valori, a causa del fatto che non riesco a recuperare la larghezza di ogni elemento di testo.Come ottenere correttamente la larghezza del testo per centrare le etichette sopra le barre del grafico?
Ecco come il mio grafico sta disegnando in questo momento:
Tutto quello che devi fare è sottrarre la metà della larghezza di ciascun elemento di testo, ma io non riesco a farlo con la segue CoffeeScript:
#Drawing value labels
svg.selectAll("rect")
.data(data)
.enter()
.append("text")
.text((d)-> d.Total)
.attr("width", x.rangeBand())
.attr("x", (d)->
textWidth = d3.selectAll("text").attr("width")
x(d.Year) + (x.rangeBand()/2) - (textWidth/2)
)
.attr("y", (d)-> y(d.Total) - 5)
.attr("font-size", "10px")
.attr("font-family", "sans-serif")
#Drawing bars
svg.selectAll("rect")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", (d)-> x(d.Year))
.attr("width", x.rangeBand())
.attr("y", (d)-> y(d.Total))
.attr("height", (d)-> height - y(d.Total))
c'è un modo che io possa accedere attributo width di ogni elemento di testo per impostare un valore per compensare?
funziona perfettamente . Grazie! – SCS
Dovrebbe funzionare lo stesso su tutti gli elementi di testo? Attualmente sto cercando di fare lo stesso con la mia etichetta sull'asse y, ma ottengo sempre una larghezza di 0, anche se sto ricevendo un elemento di testo restituito. Questo è quello che ho finora: http://pastebin.com/VzyT2btq – SCS
Funzionerà allo stesso modo per tutti gli elementi, ma devi chiamare '.getBBox()' per ogni elemento. –