Как я могу извлечь диапазоны осей для объекта ggplot2?
У меня есть объект из ggplot2
, скажем myPlot
, как я могу определить диапазоны для осей x и y?
Он не кажется простым кратным диапазону значений данных, поскольку можно масштабировать графики, изменять диапазоны осей и т.д. findFn
(от sos
), и Google, похоже, не приводит к соответствующим результатам, кроме того, как устанавливать диапазоны осей.
Ответы
Ответ 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