2015-05-21 2 views
1

Есть ли способ получить функцию plot для генерации равных xlim и ylim автоматически? Я не хочу заранее определять диапазон исправлений, но хочу, чтобы функция plot приняла решение о самом диапазоне. Однако я ожидаю, что он будет выбирать один и тот же диапазон для x и y.Установка равных xlim и ylim в функции графика

+2

Достаточно ли этого: 'x <- 1:11; y <- seq (11, 11 * 11, by = 11); plot (x, y, xlim = range (x, y), ylim = range (x, y)) '? – Jota

+0

Ну, это так :) Спасибо – Milad

ответ

3

Возможное решение состоит в определении обертку для функции участка:

plot.Custom <- function(x, y, ...) { 
    .limits <- range(x, y) 
    plot(x, y, xlim = .limits, ylim = .limits, ...) 
} 
3

Один из способов - интерактивно манипулировать, а затем выбрать правильный. Ползунок появится после запуска следующего кода.

library(manipulate) 
manipulate(
    plot(cars, xlim=c(x.min,x.max)), 
    x.min=slider(0,15), 
    x.max=slider(15,30)) 
+0

Ну, это действительно крутой вариант, и спасибо, что поделились им со мной. Однако это не решает мою проблему. Я хочу создать 100 графиков для разных наборов данных, и я не могу манипулировать каждым из них. – Milad

+0

Ну, вы не упомянули об этом в OP. – user227710

2

Я не в курсе в любом случае сделать это, используя сюжет (не значит, что не один) , ggplot может быть путем; он поддается более ретроактивному изменению, поскольку он разработан вокруг системы слоев.

library(ggplot2) 

#Creating our ggplot object 
loop_plot <- ggplot(cars, aes(x = speed, y = dist)) + 
    geom_point() 

#pulling out the 'auto' x & y axis limits 
rangepull <- t(cbind(
     ggplot_build(loop_plot)$panel$ranges[[1]]$x.range, 
     ggplot_build(loop_plot)$panel$ranges[[1]]$y.range)) 

#taking the max and min(so we don't cut out data points) 
newrange <- list(cor.min = min(rangepull[,1]), cor.max = max(rangepull[,2])) 

#changing our plot size to be nice and symmetric 
loop_plot <- loop_plot + 
    xlim(newrange$cor.min, newrange$cor.max) + 
    ylim(newrange$cor.min, newrange$cor.max) 

Обратите внимание, что объект loop_plot имеет класс ggplot и обычно не печатает до его вызова. Я использовал набор данных для автомобилей в приведенном выше коде, чтобы показать, что происходит, но просто подставьте в своем наборе данных [s], а затем сделайте все, что посмертно, ваша конечная цель. Вы также сможете добавлять заголовки и т. Д., Основанные на имени набора данных и так далее, что, скорее всего, приведет к более четкой визуализации из вашего цикла. Надеюсь, это сработает для ваших нужд.

Смежные вопросы