4

ggpairsプロットを次のように配置したいarrangeGrob:

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)

このエラーが発生します。

Error in arrangeGrob(p1, p2, ncol = 2) : input must be grobs!

この問題を回避する方法はありますか?

4

3 に答える 3

3

残念ながら、それがどのように可能かはわかりません。

まず、 はオブジェクトを操作するgridExtraため、 では機能しません。arrangeGrobTableGrob

> 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]

objectの内部表現にはggpairs、実際のグロブではなく、呼び出されるメソッドのみが含まれます。

> 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))"

実際のグロブを構築する作業全体は、 によって行われGGally:::print.ggpairsます。ソース コードを見るgrid.newpage()と、複数popViewportの およびが表示されますpushViewport。これは、構造が によって上書きされるため、低レベルのgridアプローチ (たとえば、ここで説明) でさえ適用できないことを意味します。gridGGally:::print.ggpairs

もちろん、常に方法があります。ソース コードを変更することは常に選択肢の 1 つですが、それはあなたの仕事にとって長く困難な道のりだと思います。誰かが簡単な回避策を思い付くことができれば、私は間違っていることが証明されてうれしいです.

于 2014-06-10T10:05:37.980 に答える