5

でプロットを配置しgrid.arrangeて、より複雑なコプロットを作成grid.arrangeし、これらの複雑なコプロットを結合するために使用したいと考えています。このタスクでは、次のソリューション ( https://stackoverflow.com/a/13295880/1000343 ) を使用して、複数のプロットを配置し、幅が等しいことを確認しています。コードのデモは次のとおりです。

library(ggplot2); library(gridExtra)
gA <- ggplotGrob(A)
gB <- ggplotGrob(B)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)

x <- grid.arrange(gA, gB, ncol=1)
y <- grid.arrange(gA, gB, ncol=1)
grid.arrange(x, y, ncol=2)

私の場合は明確にするために、xyが異なるわずかに異なるプロットです。grid.arrange他のグリッドベースの関数のようにプロットを返していないことは わかっています。

4

1 に答える 1

6

のソース コードを見ると、grid.arrange単なるラッパーです。arrangeGrob

function (..., as.table = FALSE, clip = TRUE, main = NULL, sub = NULL, 
    left = NULL, legend = NULL, newpage = TRUE) 
{
    if (newpage) 
        grid.newpage()
    grid.draw(arrangeGrob(..., as.table = as.table, clip = clip, 
        main = main, sub = sub, left = left, legend = legend))
}

したがって

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip() 
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 
gA <- ggplotGrob(A)
gB <- ggplotGrob(B)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
x <- arrangeGrob(gA, gB, ncol=1)
y <- arrangeGrob(gA, gB, ncol=1)
grid.arrange(x, y, ncol=2)

動作します

ここに画像の説明を入力

于 2013-11-07T03:50:06.333 に答える