再現可能な例は、パッケージ cowplot のこのチュートリアルにあります。
https://cran.r-project.org/web/packages/cowplot/vignettes/shared_legends.html
サンプルコードのコピー:
library(ggplot2)
library(cowplot)
#down-sampled diamonds data set
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
# Make three plots.
# We set left and right margins to 0 to remove unnecessary spacing in the
# final plot arrangement.
p1 <- qplot(carat, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt"))
p2 <- qplot(depth, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
p3 <- qplot(color, price, data=dsamp, colour=clarity) +
theme(plot.margin = unit(c(6,0,6,0), "pt")) + ylab("")
# arrange the three plots in a single row
prow <- plot_grid( p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
p3 + theme(legend.position="none"),
align = 'vh',
labels = c("A", "B", "C"),
hjust = -1,
nrow = 1
)
legend_b <- get_legend(p1 + theme(legend.position="bottom"))
# add the legend underneath the row we made earlier. Give it 10% of the height
# of one plot (via rel_heights).
p <- plot_grid( prow, legend_b, ncol = 1, rel_heights = c(1, .2))
p
この例は、凡例がグリッドの左下に揃えて描画されるプロットを示しています。ただし、凡例はプロットの下部中央に合わせて描画されるため、以前は異なっていました。これは、数か月前に私の個人的なコードによって生成された例です。 https://s1.postimg.org/8pf2en1zen/Untitled.png (現在、アップロード ツールが機能していません)
いずれかのパッケージで不明な量の変更を行った後に古いコードを再実行すると、凡例が左下に配置されます (チュートリアルでも示されているように、上から 3 番目のプロット): https://s1.postimg.org/3agjw7n9gf/Untitled2.png
問題は、凡例を下部中央に揃えて描画するようにコードを調整する方法です。