Как установить x и y пределы для одинаковых значений? - PullRequest
0 голосов
/ 21 февраля 2019

Это некоторые данные, которые я сделал.У меня есть два фрейма данных с двумя переменными в каждом.

var1 <- (1:10)*(rnorm(10,2,0.1))
var2 <- (6:15)*(rnorm(10,1,0.1))       
df1 <- as.data.frame(cbind(var1,var2))

var3 <- (1:10)*(rnorm(10,3,0.1))
var4 <- (6:15)*(rnorm(10,1.5,0.1))       
df2 <- as.data.frame(cbind(var3,var4))

Существует цикл для построения первой переменной df1 и df2, а также второй из df1 и df2.

plot_list = list()  
for(i in 1:ncol(df1)){
        p=ggplot(df1, 
                 aes_string(x=df1[,i], 
                            y=df2[,i]))+
                geom_point()
        plot_list[[i]] = p
}

library(gridExtra)
do.call("grid.arrange", c(plot_list[c(1:2)], ncol=1)) 

И это сюжет, который я получил.

enter image description here

Пока все хорошо.Но я бы хотел, чтобы x и y на каждом графике имели одинаковый лимит на основе max и min.Например, в приведенном выше графике оба x и должны идти от ~ 5 до ~ 30.На графике ниже оба x и должны идти от ~ 6 до ~ 24.Я мог бы установить пределы вручную, но мне нужно сделать это для многих участков.

Есть ли способ установить пределы x и y для каждого графика на основе минимума и максимума, наблюдаемых на любой из осей?

Спасибо за помощь.

1 Ответ

0 голосов
/ 21 февраля 2019

В целом, я бы предложил, чтобы данные для каждого графика были в своем собственном data.frame.Наличие одного data.frame и использование фасетов является опцией, но фасеты затрудняют определение различных ограничений для каждого графика.Поэтому я выбрал решение grid.arrange, подобное вашему.

library(ggplot2)
library(purrr)
var1 <- (1:10)*(rnorm(10,2,0.1))
var2 <- (6:15)*(rnorm(10,1,0.1))       

var3 <- (1:10)*(rnorm(10,3,0.1))
var4 <- (6:15)*(rnorm(10,1.5,0.1))       

df1 <- data.frame(x = var1, y = var3)
df2 <- data.frame(x = var2, y = var4)

plots <- map(
  list(df1, df2),
  function(data) {
    ggplot(data, aes(x, y)) +
      geom_point() +
      coord_fixed(xlim = range(c(data$x, data$y)), ylim = range(c(data$x, data$y)))
  })

gridExtra::grid.arrange(grobs = plots, nrow = 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...