15

ggplot2で作成したグラフを配置するために、グリッドlpackage を使用しています。

library(ggplot2)
library(grid)

Layout <- grid.layout(nrow = 4, ncol = 4,
          widths = unit(1, "null"), 
          heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null")))
grid.show.layout(Layout)

plot1 = ggplot(diamonds, aes(clarity, fill = color)) + 
            geom_bar() + 
            facet_wrap(~cut, nrow = 1)
print(plot1 + theme(legend.position = "none"), 
vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4))

問題は、プロットを 3 行目 (3,1) - (3,4) に配置し、凡例を (4,4) の位置に配置することです。残念ながら、凡例変数だけを作成する方法を実際に見つけることはできません。オンラインで検索したところ、最も近いものは古い + opts(keep = "legend_box")ものを使用していましたが、廃止されました。

古いソリューション

4

2 に答える 2

29

grobggplotのオブジェクトから凡例を取得できます。次に、grid.arrange関数を使用してすべてを配置できます。

library(gridExtra)
g_legend<-function(a.gplot){
    tmp <- ggplot_gtable(ggplot_build(a.gplot))
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
    legend <- tmp$grobs[[leg]]
    legend
}

legend <- g_legend(plot1)

grid.arrange(legend, plot1+ theme(legend.position = 'none'), 
    ncol=2, nrow=1, widths=c(1/6,5/6))

この関数を使用した例は Web 上にたくさんありg_legendます。

HTH

于 2012-09-22T00:56:29.770 に答える
4

ggplot2 自身の開発者によって提案された関数grid_arrange_shared_legendがあります: https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs、かなりうまく機能します。

于 2015-01-28T11:17:11.193 に答える