Lavorando con D3, voglio avere un'etichetta dell'asse Y che è ruotata di -90º e centrata sull'asse Y. Ho pensato che potrebbe essere un pezzo di torta, e scrive:Come centrare il testo ruotato di 90º in SVG
// Y Axis Label
svg.append('svg:text')
.attr('class', 'y label')
.attr('text-anchor', 'middle')
.attr('y', 0)
.attr('width', height)
.attr('transform', 'translate(-' + yAxisSpacing + ',' + height + ') rotate(-90)')
.text('Y Axis Label')
height
in questo caso è l'altezza del grafico (l'area occupata dalla verticale SVG). Il codice precedente renderà un elemento <text>
in basso a sinistra del grafico, quindi centrerà il testo relativo a quel punto in basso a sinistra. Il width
fa non cambia e quindi invece di essere centrato corre fuori dall'angolo in basso a sinistra della svg.
Avevo intuito che se il width
fosse uguale allo height
del grafico, il testo al suo interno verrebbe centrato verticalmente. Ciò non sembra essere il caso-O- c'è qualche proprietà di tipo magico display:block
che ho bisogno di impostare in SVG in modo che width
funzioni sull'elemento <text>
.
Come dovrebbe essere fatto?
Sulla base delle risposte, sono andato con un percorso javascript e modificato la linea di cui sopra per essere (altezza/2) ...
.attr('transform', 'translate(-' + yAxisSpacing + ',' + height/2 + ') rotate(-90)')
Quindi, in altre parole, devo impostare manualmente la trasformazione x, y per centrare verticalmente con javascript. Speravo di farla franca con una soluzione CSS pura che potesse essere fluida con le dimensioni della pagina. –