2016-03-24 58 views
19

3つのプロットがあり、それらをgrid.arrangeと組み合わせてみます。最後のプロットは、最初の2つのプロットよりも小さい高さでなければならず、すべてのプロットは同じ幅にする必要があります。grid.arrangeでプロットの幅と高さを指定する

実施例:ここ

p1 <- qplot(mpg, wt, data=mtcars) 
p2 <- p1 
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank()) 

grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2), 
     arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1)) 

enter image description here

、最後のプロットは、最初の2つのより大きな幅を有しています。私の実際のデータでは、たとえテキストとタイトルをy軸にとっても、3番目のプロットの幅はまだ変わっていません。

私は "幅" を追加しようとしました:

p1 <- ggplotGrob(p1) 
p2 <- ggplotGrob(p2) 
p3 <- ggplotGrob(p3) 
# 
stripT <- subset(p2$layout, grepl("spacer", p2$layout$name)) 
p3 <- p3[-stripT$t, ] 

grid.draw(rbind(p1, p2, p3, size = "first")) 
:私はまた別のコードを試してみました...

enter image description here

grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2), 
     arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1), widths=c(2,1)) 

をしかし、それは2つの列のプロットに変身

私は同じ幅を持っていますが、今私は高さをどのように変更するのか分かりません...

enter image description here

まあ、誰かが最終的なグラフのための高さと幅の両面を組み合わせることが私を助けることができますか?

答えて

20

cowplotパッケージからplot_gridをお試しください:gtableと

library(ggplot2) 
library(gridExtra) 
library(cowplot) 
p1 <- qplot(mpg, wt, data=mtcars) 
p2 <- p1 
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank()) 
plot_grid(p1, p2, p3, align = "v", nrow = 3, rel_heights = c(1/4, 1/4, 1/2)) 

enter image description here

+0

、どうもありがとう! – Chika

5

は、手動でのパネルの高さを設定する必要があり、けれども

g1 <- ggplotGrob(p1) 
g2 <- ggplotGrob(p2) 
g3 <- ggplotGrob(p3) 

library(gridExtra) 
g <- rbind(g1, g2, g3) 

set_panel_heights <- function(g, heights){ 
    g$heights <- grid:::unit.list(g$heights) # hack until R 3.3 comes out 
    id_panels <- unique(g$layout[g$layout$name=="panel", "t"]) 
    g$heights[id_panels] <- heights 
    g 
} 

g <- set_panel_heights(g, lapply(1:3, grid::unit, "null")) 
grid::grid.draw(g) 

enter image description here

少し冗長、このアプローチは相対的な高さを指定するよりも一般的です:あなたは、グリッド単位のすべての種類を混在させることができ、私が探していたまさに

grid::grid.newpage() 
g <- do.call(rbind, replicate(3, ggplotGrob(ggplot()), simplify = FALSE)) 
g <- set_panel_heights(g, list(unit(1,"in"), unit(1,"line"), unit(1,"null"))) 
grid::grid.draw(g) 

enter image description here

関連する問題