2011-10-09 13 views
56

Ho un oggetto da ggplot2, ad esempio myPlot, come posso identificare gli intervalli per gli assi xey?Come posso estrarre gli intervalli di trama degli assi per un oggetto ggplot2?

Non sembra essere un semplice multiplo dell'intervallo dei valori dei dati, poiché è possibile ridimensionare i grafici, modificare gli intervalli degli assi e così via. findFn (da sos) e Google non sembrano mostrare risultati pertinenti, se non come impostare gli intervalli degli assi.

+1

Sono abbastanza sicuro che non può essere estratto direttamente dall'oggetto trama stesso, ma è possibile dedurlo (in casi semplici) da i tuoi dati e i valori predefiniti per 'expand'. Vedi [qui] (http://stackoverflow.com/questions/7611691/relative-positioning-of-geom-text-in-ggplot2/7617377#7617377). – joran

+0

@joran Grazie - sembra interessante.Intendi 'expand_range'? Non sono riuscito a far funzionare 'expand' come suggerito nel link. – Iterator

+1

Mi riferivo all'argomento 'expand' per le funzioni' scale_ * 'in' ggplot'. Ad esempio, vedere i valori di default elencati [qui] (http://had.co.nz/ggplot2/scale_continuous.html). – joran

risposta

28

Nelle versioni più recenti di ggplot2, è possibile trovare queste informazioni tra l'uscita di ggplot_build(p), dove p è l'oggetto ggplot.

Per le versioni precedenti di ggplot (< 0.8.9), la seguente soluzione funziona:

E fino a Hadley rilascia la nuova versione, questo potrebbe essere utile. Se non imposti i limiti nella trama, non ci saranno informazioni nell'oggetto ggplot. Tuttavia, in questo caso, puoi utilizzare i valori predefiniti di ggplot2 e ottenere xlim e ylim dai dati.

> ggobj = ggplot(aes(x = speed, y = dist), data = cars) + geom_line() 
> ggobj$coordinates$limits 

$x 
NULL 

$y 
NULL 

Dopo aver impostato i limiti, non appena disponibili nell'oggetto:

> bla = ggobj + coord_cartesian(xlim = c(5,10)) 
> bla$coordinates$limits 
$x 
[1] 5 10 

$y 
NULL 
+0

Sembra buono, grazie! – Iterator

+0

Ho ricevuto questa informazione chiamando la funzione str su un oggetto ggplot. Questa è una vera e propria funzione quando devi trovare la struttura di un oggetto R. –

+0

concordato. Probabilmente è il mio comando preferito. :) – Iterator

18

Prendi il yrange con

ggplot_build(myPlot)$panel$ranges[[1]]$y.range 

e la xrange con

ggplot_build(myPlot)$panel$ranges[[1]]$x.range 
+1

Queste soluzioni funzionano bene per assi numerici continui, ma come si possono gestire assi con date (scala continua) o valori categoriali? Quando utilizzo questo metodo ottengo grandi valori numerici che richiedono una conversione in formato data per aggiungere testo usando geom_text. –

16

I Sto usando ggplot2 versione 2, non sono sicuro se questo è lo stesso è la versione precedente, Supponi di aver salvato la trama su plt oggetto. E 'facile da estrarre gli intervalli,

# y-range 
layer_scales(plt)$y$range$range 

# x-range 
layer_scales(plt)$x$range$range 
13

In versione 2.2.0 questo deve essere fatto nel modo seguente:

# y-range 
ggplot_build(plot.object)$layout$panel_ranges[[1]]$y.range 
# x-range 
ggplot_build(plot.object)$layout$panel_ranges[[1]]$x.range 
6

UPDATE

Attualmente sto usando ggplot2versione 2.2.1.9000 (versione di sviluppo) e il modo in cui estrarre gli intervalli dei valori dell'asse x e dell'asse grafico è cambiato una volta altri:

obj <- qplot(mtcars$disp, bins = 5) 

# x range 
ggplot_build(obj)$layout$panel_params[[1]]$x.range 

# y range 
ggplot_build(obj)$layout$panel_params[[1]]$y.range 

OLDER RISPOSTA

Sono attualmente in uso ggplot2 versione 2.1.0.9001 e ho notato, che spazia può essere estratto con un pezzo leggermente diverso di R codice:

obj <- qplot(mtcars$disp, bins = 5) 

# x range 
ggplot_build(obj)$layout$panel_ranges[[1]]$x.range 

# y range 
ggplot_build(obj)$layout$panel_ranges[[1]]$y.range 
Problemi correlati