name - ¿Cómo puedo extraer los rangos de los ejes de trazado para un objeto ggplot2?
r ggplot change legend labels (5)
Tengo un objeto de ggplot2
, digamos myPlot
, ¿cómo puedo identificar los rangos para los ejes xey?
No parece ser un simple múltiplo del rango de los valores de datos, porque uno puede cambiar la escala de los gráficos, modificar los rangos de los ejes, y así sucesivamente. findFn
(de sos
) y Google no parecen estar findFn
resultados relevantes, aparte de cómo establecer los rangos de los ejes.
En la versión 2.2.0, esto tiene que hacerse 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
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 siguiente solución funciona:
Y hasta que Hadley publique la nueva versión, esto 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 establece los límites, están disponibles en el objeto:
> bla = ggobj + coord_cartesian(xlim = c(5,10))
> bla$coordinates$limits
$x
[1] 5 10
$y
NULL
Estoy usando ggplot2
versión 2, no estoy seguro de si esto es lo mismo que la versión anterior, supongamos que ha guardado su trazado en el objeto plt
. Es fácil extraer los rangos
# y-range
layer_scales(plt)$y$range$range
# x-range
layer_scales(plt)$x$range$range
Obtener el yrange con
ggplot_build(myPlot)$panel$ranges[[1]]$y.range
y el xrange con
ggplot_build(myPlot)$panel$ranges[[1]]$x.range
ACTUALIZAR
Actualmente uso ggplot2
versión 2.2.1.9000 (versión de desarrollo) y la forma en que se extraen los rangos de los valores del eje X y del 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 noté que los rangos se pueden extraer usando una pieza ligeramente diferente de código R
:
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