2011-10-09 17 views
56

Tengo un objeto de ggplot2, digamos myPlot, ¿cómo puedo identificar los rangos para los ejes xey?¿Cómo puedo extraer los rangos de los ejes de trazado para un objeto ggplot2?

No parece ser un simple múltiplo del rango de valores de datos, porque uno puede cambiar la escala de los trazados, modificar los rangos de los ejes, y así sucesivamente. findFn (desde sos) y Google no parecen estar obteniendo resultados relevantes, aparte de cómo establecer los rangos de los ejes.

+1

Estoy bastante seguro de que no se puede extraer directamente del objeto de trazado en sí, pero se puede deducir (en casos simples) de sus datos y los valores predeterminados para 'expand'. Ver [aquí] (http://stackoverflow.com/questions/7611691/relative-positioning-of-geom-text-in-ggplot2/7617377#7617377). – joran

+0

@joran Gracias, eso parece interesante.¿Te refieres a 'expand_range'? No pude hacer que 'expand' funcione, como se sugiere en el enlace. – Iterator

+1

Me refería al argumento 'expand' a las funciones' scale_ * 'en' ggplot'. Por ejemplo, consulte los valores predeterminados enumerados [aquí] (http://had.co.nz/ggplot2/scale_continuous.html). – joran

Respuesta

28

En las versiones más nuevas de ggplot2, puede encontrar esta información entre la salida de ggplot_build(p), donde p es su objeto ggplot.

Para versiones anteriores de ggplot (< 0.8.9), la solución siguientes obras:

Y hasta Hadley libera la nueva versión, esta podría ser útil. Si no establece los límites en el diagrama, no habrá información en el objeto ggplot. Sin embargo, en ese caso, puede usar los valores predeterminados de ggplot2 y obtener los valores xlim e ylim de los datos.

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

$x 
NULL 

$y 
NULL 

Una vez que establezca los límites, que estén disponibles en el objeto:

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

$y 
NULL 
+0

Se ve bien, gracias! – Iterator

+0

Obtuve esta información llamando a la función str en un objeto ggplot. Esta es una función muy útil cuando necesitas encontrar la estructura de un objeto R. –

+0

De acuerdo. Es probablemente mi comando favorito. :) – Iterator

18

Consigue el yrange con

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

y la xrange con

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

Estas soluciones funcionan bien para ejes numéricos continuos, pero ¿cómo se pueden manejar ejes con fechas (escala continua) o valores categóricos? Cuando uso este método, obtengo valores numéricos grandes que requieren algún formato de conversión a fecha para agregar texto usando geom_text. –

16

I estoy usando ggplot2 versión 2, no estoy seguro de si esto es lo mismo que la versión anterior, Suponga que ha guardado su trazado en el objeto plt. Es fácil de extraer los rangos,

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

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

En versión 2.2.0 esto tiene que ser hecho de la siguiente manera:

# 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

ACTUALIZACIÓN

actualmente estoy usando ggplot2versión 2.2.1.9000 (versión de desarrollo) y la forma en que se extrajeron los rangos de los valores de eje x y eje y ha cambiado una vez más:

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 

MAYOR RESPUESTA

Actualmente estoy usando ggplot2 versión 2.1.0.9001 y me di cuenta, que va puede ser extraído por medio de una pieza ligeramente diferente de R código:

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 
Cuestiones relacionadas