Подтвердить что ты не робот

Как я могу извлечь диапазоны осей для объекта ggplot2?

У меня есть объект из ggplot2, скажем myPlot, как я могу определить диапазоны для осей x и y?

Он не кажется простым кратным диапазону значений данных, поскольку можно масштабировать графики, изменять диапазоны осей и т.д. findFn (от sos), и Google, похоже, не приводит к соответствующим результатам, кроме того, как устанавливать диапазоны осей.

4b9b3361

Ответ 1

В новых версиях ggplot2 вы можете найти эту информацию среди вывода ggplot_build(p), где p - ваш объект ggplot.

Для более старых версий ggplot (< 0.8.9) работает следующее решение:

И пока Хэдли не выпустит новую версию, это может быть полезно. Если вы не зададите лимиты на графике, в объекте ggplot не будет информации. Однако в этом случае вы можете использовать значения по умолчанию ggplot2 и получить xlim и ylim из данных.

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

$x
NULL

$y
NULL

Как только вы установите ограничения, они становятся доступными в объекте:

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

$y
NULL

Ответ 2

Я использую ggplot2 версии 2, я не уверен, что это то же самое, что и предыдущая версия. Предположим, вы сохранили свой график на объекте plt. Это легко извлечь диапазоны,

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

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

В случае графика фасетов вы можете получить доступ к масштабам отдельных фасетов, используя layer_scales(plot, row_idx, col_idx). Например, чтобы получить доступ к фасету в первой строке и во втором столбце,

# y-range
layer_scales(plt, 1, 2)$y$range$range

# x-range
layer_scales(plt, 1, 2)$x$range$range

Ответ 3

Получите yrange с помощью

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

и xrange с

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

Ответ 4

В версии 2.2.0 это должно выполняться следующим образом:

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

Ответ 5

Ноябрь 2018 ОБНОВЛЕНИЕ

Начиная с версии ggplot2 3.1.0, работает следующее:

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

Удобная функция:

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)

До следующего обновления...

Ответ 6

Начиная с августа 2018 года вы извлекаете диапазоны осей X и Y следующим образом.

ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range