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 los datos, porque uno puede cambiar la escala de los gráficos, modificar los rangos de los ejes, etc. findFn
(de sos
) y Google no parecen estar generando resultados relevantes, aparte de cómo establecer los rangos de los ejes.
expand
. Vea aquí .expand
argumento de lasscale_*
funciones enggplot
. Por ejemplo, consulte los valores predeterminados que se enumeran aquí .ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range
ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
Respuestas:
En las versiones más recientes de ggplot2, puede encontrar esta información entre la salida de
ggplot_build(p)
, dondep
está su objeto ggplot.Para versiones anteriores de ggplot (<0.8.9), la siguiente solución funciona:
Y hasta que Hadley lance la nueva versión, esto podría ser útil. Si no establece los límites en el gráfico, no habrá información en el objeto ggplot. Sin embargo, en ese caso, puede usar los valores predeterminados de ggplot2 y obtener el xlim y el 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, estarán disponibles en el objeto:
> bla = ggobj + coord_cartesian(xlim = c(5,10)) > bla$coordinates$limits $x [1] 5 10 $y NULL
fuente
ggplot2
versión 2.1.0.9001 use esteR
código:ggplot_build(obj)$layout$panel_ranges[[1]]$x.range
ggplot_build(obj)$layout$panel_ranges[[1]]$y.range
ggplot2
versión 2.2.1.9000 y (muy probablemente) más reciente, use esteR
código:ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range
ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
Estoy usando la
ggplot2
versión 2, no estoy seguro de si esta es la misma que la versión anterior, suponga que ha guardado su gráfico en elplt
objeto. Es fácil extraer los rangos,# y-range layer_scales(plt)$y$range$range # x-range layer_scales(plt)$x$range$range
En el caso de un gráfico de facetas, puede acceder a escalas de facetas individuales utilizando
layer_scales(plot, row_idx, col_idx)
. Por ejemplo, para acceder a la faceta en la primera fila y la segunda columna,# y-range layer_scales(plt, 1, 2)$y$range$range # x-range layer_scales(plt, 1, 2)$x$range$range
fuente
ylim
ocoord_cartesian
), la expansión de escala se aplicará a estos límites en lugar de a los devueltos por el código que se proporciona aquí.ACTUALIZACIÓN de noviembre de 2018
A partir de la
ggplot2
versión 3.1.0 , funciona lo siguiente: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
Una función de conveniencia:
get_plot_limits <- function(plot) { gb = ggplot_build(plot) xmin = gb$layout$panel_params[[1]]$x.range[1] xmax = gb$layout$panel_params[[1]]$x.range[2] ymin = gb$layout$panel_params[[1]]$y.range[1] ymax = gb$layout$panel_params[[1]]$y.range[2] list(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax) } get_plot_limits(p)
Hasta la próxima actualización ...
fuente
Consigue el yrange con
ggplot_build(myPlot)$panel$ranges[[1]]$y.range
y el xrange con
ggplot_build(myPlot)$panel$ranges[[1]]$x.range
fuente
En la versión 2.2.0, esto debe 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
fuente
A partir de agosto de 2018, extrae los rangos de los ejes xey con lo siguiente.
ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range
ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
fuente
Como se menciona aquí: https://gist.github.com/tomhopper/9076152#gistcomment-2624958 hay una diferencia entre las dos opciones:
#get ranges of the data ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range #get ranges of the plot axis ggplot_build(obj)$layout$panel_params[[1]]$x.range ggplot_build(obj)$layout$panel_params[[1]]$y.range
Aquí hay un conjunto de funciones de conveniencia para tomar una lista de gráficos, extraer el rango común del eje y y reemplazarlo. Lo necesitaba porque utilicé diferentes conjuntos de datos dentro de un gráfico organizado a través de
ggarange
:require(ggplot2) #get the visible scales from single plots get_plot_view_ylimits <- function(plot) { gb = ggplot_build(plot) ymin = gb$layout$panel_params[[1]]$y.range[1] ymax = gb$layout$panel_params[[1]]$y.range[2] message(paste("limits are:",ymin,ymax)) list(ymin = ymin, ymax = ymax) } #change the limit of single plot, using list of limits change_plot_ylimits <- function(plot, nlimits){ p <- plot + ggplot2:::limits(unlist(nlimits, use.names =FALSE),"y") } #adjust the scales of multiple plots #take a list of plots, passes back adjusted list of plots adjust_plots_shared_ylimits <- function(plotList) { #read limits first <- TRUE for (plot in plotList) { if (first) { nlimits <- get_plot_view_ylimits(plot) first <- FALSE } else { altLimits <- get_plot_view_ylimits(plot) nlimits$ymin <- min(nlimits$ymin,altLimits$ymin) nlimits$ymax <- max(nlimits$ymax,altLimits$ymax) } } message(paste("new limits are:",nlimits$ymin,nlimits$ymax)) #adjust limits lapply(plotList,change_plot_ylimits,nlimits) }
Pensé que esto también podría ser útil para otros.
fuente
stat_smooth( method = "lm")