Ich habe derzeit ein Diagramm, das über jedem Balken Balkenwerte zugeordnet hat, aber ich habe Schwierigkeiten, die Wertelabels zu zentrieren, da ich nicht in der Lage bin, die Breite jedes Textelements abzurufen. DieseWie bekomme ich die Textbreite richtig zu den mittleren Beschriftungen oberhalb der Grafikbalken?
ist, wie mein Graph ist zur Zeit Zeichnung:
Alles, was ich tun muß, ist die Hälfte jeden Textelementes der Breite zu subtrahieren, aber ich kann nicht so mit dem zu tun, scheint folgende Coffee:
#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))
gibt es eine Möglichkeit, dass ich jede Breite Attribut des Textelement zugreifen kann einen Wert einzustellen ausgleichen?
funktioniert perfekt . Vielen Dank! – SCS
Soll es bei allen Textelementen gleich funktionieren? Ich versuche derzeit, dasselbe mit meiner y-Achsen-Beschriftung zu erreichen, aber ich bekomme immer eine Breite von 0, obwohl ich ein zurückgegebenes Textelement erhalte. Das ist, was ich bis jetzt habe: http://pastebin.com/VzyT2btq – SCS
Es wird das gleiche für alle Elemente funktionieren, aber Sie müssen '.getBBox()' für jedes Element aufrufen. –