如何将x和y限制设置为相同的值?

时间:2019-02-21 18:59:58

标签: r

这是我做的一些数据。我有两个带有两个变量的数据框。

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具有相同的限制。例如,在上面的图中,x和应该都从〜5变为〜30。在下面的图中,x和应该从〜6变为〜24。我可以手动设置限制,但是我需要对许多图进行设置。

是否有任何方法可以根据在任一轴上观察到的最小和最大来设置每个图的x和y极限?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

通常,我建议每个图的数据都应使用自己的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)