如何使用ggpairs()在不同方面设置相同的比例

时间:2015-06-08 23:01:26

标签: r ggplot2 ggally

我有以下数据集和代码来构建数据框中每对变量的2d密度等值线图。我的问题是ggpairs()中是否有一种方法可以确保不同变量对的比例相同,例如ggplot2中不同构面的相同比例。例如,我希望每个图片的x比例和y比例都来自[-1,1]。

提前致谢!

情节看起来像enter image description here

intersection

2 个答案:

答案 0 :(得分:2)

我不确定这是否可以直接从ggpairs函数中获取,但你可以从ggpairs中提取一个图并修改它然后保存回来。

此示例循环遍历绘图矩阵的下三角形,并替换现有的x和y轴刻度。

data(tips, package = "reshape")
## pm is the original ggpair object
pm <- ggpairs(tips[,c("total_bill", "tip", "size")])
## pm2 will be modified in the loop
pm2 <- pm
for(i in 2:pm$nrow) {
  for(j in 1:(i-1)) {
    pm2[i,j] <- pm[i,j] +
      scale_x_continuous(limits = c(-5, 75)) +
      scale_y_continuous(limits = c(-5, 10))
}
}

pm看起来像这样

enter image description here

pm2看起来像这样

enter image description here

要解决您的问题,您需要遍历整个绘图矩阵,并将x和y刻度设置为-1到1的限制。

答案 1 :(得分:1)

我在ggpairs中找到了一种方法,它使用自定义函数创建图形

df <- read.table("test.txt")

upperfun <- function(data,mapping){
  ggplot(data = data, mapping = mapping)+
    geom_density2d()+
    scale_x_continuous(limits = c(-1.5,1.5))+
    scale_y_continuous(limits = c(-1.5,1.5))
}   

lowerfun <- function(data,mapping){
  ggplot(data = data, mapping = mapping)+
    geom_point()+
    scale_x_continuous(limits = c(-1.5,1.5))+
    scale_y_continuous(limits = c(-1.5,1.5))
}  


ggpairs(df,upper = list(continuous = wrap(upperfun)),
        lower = list(continuous = wrap(lowerfun)))      # Note: lower = continuous

使用这种功能,它可以像任何ggplot一样自定义!

Graph