2011-09-30 20 views
9

Sto usando geom_text per annotare i grafici in gglot2 e voglio utilizzare il posizionamento relativo piuttosto che assoluto. Cioè, voglio che la posizione di (0.5, 0.5) sia a punto morto, indipendentemente dai limiti dell'asse xey. È possibile?Posizionamento relativo di geom_text in ggplot2?

In alternativa, potrei ovviamente trasformare una posizione relativa in una assoluta se avessi i limiti x e y. È possibile estrarre quelli da una trama?

risposta

5

Se si conosce l'intervallo dei dati nel grafico, è possibile calcolare i limiti "veri" xey utilizzando il fatto che ggplot utilizza un fattore di espansione additiva di 0,05 per impostazione predefinita, in modo che le estensioni del grafico si estendano solo leggermente oltre i valori dei dati effettivi.

È possibile specificare il fattore di espansione moltiplicativo e additivo quando si specificano le scale utilizzando expand = c(mult, add) dove mult è il fattore moltiplicativo e così via. Quindi l'impostazione predefinita è expand = c(0,0.05).

+0

Yea destra ora sto andando molto lontano con le gamme di dati. Non sapevo però di specificare il fattore di espansione. Grazie mille. – c00kiemonster

+3

Non ho capito come funziona. Sto affrontando questo problema, potresti estendere un po 'di più la spiegazione, magari con un semplice esempio? – Eduardo

1

Sì, è possibile estrarre i limiti x e y da un diagramma ggplot2. Questa funzione restituisce la coordinate x e y del centro di un oggetto trama ggplot2:

center.position <- function(plot) { 
xpos <- (ggplot_build(plot)$panel$ranges[[1]]$x.range[2]-ggplot_build(plot)$panel$ranges[[1]]$x.range[1])/2+ggplot_build(plot)$panel$ranges[[1]]$x.range[1] 
ypos <- (ggplot_build(plot)$panel$ranges[[1]]$y.range[2]-ggplot_build(plot)$panel$ranges[[1]]$y.range[1])/2+ggplot_build(plot)$panel$ranges[[1]]$y.range[1] 
return(data.frame(x=xpos,y=ypos)) 
} 

Se la x-Data è in POSIXct formato, avete ancora a trasformarlo:

center.coords <- center.position(myplot) 
myplot <- myplot + annotate("text",x=as.POSIXct(center.coords$x,origin="1970-01-01"), y=center.coords$y, label="X") 
+1

La struttura di 'ggplot_build (plot)' è cambiata, a proposito. In 2.1.1 è qualcosa come 'ggplot_build (plot) $ layout $ panel_ranges [[1]] $ x.range [2]'. –

Problemi correlati