首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安排GGally的情节与gridExtra?

安排GGally的情节与gridExtra?
EN

Stack Overflow用户
提问于 2014-06-10 07:22:34
回答 3查看 2K关注 0票数 4

我想和ggpairs一起安排我的arrangeGrob情节

代码语言:javascript
复制
library(GGally)
library(gridExtra)

df <- structure(list(var1 = 1:5, var2 = 4:8, var3 = 6:10), .Names = c("var1", "var2", "var3"), row.names = c(NA, -5L), class = "data.frame")

p1 <- ggpairs(df, 1:3) 
p2 <- ggpairs(df, 1:2)

p <- arrangeGrob(p1, p2, ncol=2)

导致此错误:

代码语言:javascript
复制
Error in arrangeGrob(p1, p2, ncol = 2) : input must be grobs!

有办法解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-10 10:05:37

不幸的是,我看不出这是怎么可能的。

首先,它不适用于gridExtra,因为arrangeGrobTableGrob对象进行操作:

代码语言:javascript
复制
> ggplotGrob(qplot(1:100))
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
TableGrob (6 x 5) "layout": 8 grobs
  z     cells       name                                 grob
1 0 (1-6,1-5) background      rect[plot.background.rect.3349]
2 3 (3-3,3-3)     axis-l absoluteGrob[GRID.absoluteGrob.3341]
3 1 (4-4,3-3)     spacer                       zeroGrob[NULL]
4 2 (3-3,4-4)      panel               gTree[GRID.gTree.3329]
5 4 (4-4,4-4)     axis-b absoluteGrob[GRID.absoluteGrob.3335]
6 5 (5-5,4-4)       xlab         text[axis.title.x.text.3343]
7 6 (3-3,2-2)       ylab         text[axis.title.y.text.3345]
8 7 (2-2,4-4)      title           text[plot.title.text.3347]

ggpairs对象的内部表示只包含要调用的方法,而不是实际的grobs:

代码语言:javascript
复制
> str(p1$plots)
List of 9
 $ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var1))"
 $ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var2, y = var1))"
 $ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var3, y = var1))"
 $ : chr "ggally_points(ggally_data, ggplot2::aes(x = var1, y = var2))"
 $ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var2))"
 $ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var3, y = var2))"
 $ : chr "ggally_points(ggally_data, ggplot2::aes(x = var1, y = var3))"
 $ : chr "ggally_points(ggally_data, ggplot2::aes(x = var2, y = var3))"
 $ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var3))"

构建实际grobs的全部工作由GGally:::print.ggpairs完成。看看源代码,您将看到grid.newpage()以及多个popViewportpushViewport,这意味着即使是低级别的grid方法(例如描述的here)也不适用,因为grid构造将被GGally:::print.ggpairs覆盖。

当然总会有办法的。修改源代码始终是一种选择,尽管我认为这是一条漫长而困难的任务。如果有人能想出一个简单的解决办法,我会很高兴被证明是错误的。

票数 3
EN

Stack Overflow用户

发布于 2016-02-03 08:29:58

代码语言:javascript
复制
library(GGally)
library(gridExtra)
library(grid)

# reproducing initial data
df <- structure(list(var1 = 1:5, var2 = 4:8, var3 = 6:10), 
                .Names = c("var1", "var2", "var3"), 
                row.names = c(NA, -5L), class = "data.frame")
p1 <- ggpairs(df, 1:3) 
p2 <- ggpairs(df, 1:2)

# declaring new method for drawing ggmatrix objects using grid.draw
grid.draw.ggmatrix <- function(x, recording = T) print(x, gridNewPage = F)
# then making them look like grob objects
attributes(p1)$class <- c(attributes(p1)$class, "grob")
attributes(p2)$class <- c(attributes(p2)$class, "grob")

p <- arrangeGrob(p1, p2, ncol=2)
grid.newpage()
grid.draw(p)

票数 3
EN

Stack Overflow用户

发布于 2021-06-01 10:22:13

刚刚找到了如何用牛仔图解决这个问题的答案(在https://github.com/ggobi/ggally/issues/256找到)

解决方案:

代码语言:javascript
复制
 library(GGally)
 library(gridExtra)
 library(cowplot)

 df <- structure(list(var1 = 1:5,var2 = 4:8, var3 = 6:10), 
                      .Names = c("var1",  "var2", "var3"),
                      row.names = c(NA, -5L), class = "data.frame")

 p1 <- ggpairs(df, 1:3) 
 p2 <- ggpairs(df, 1:2)



 plot_grid(
   ggmatrix_gtable(p1),
   ggmatrix_gtable(p2),
   nrow = 2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24135157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档