この質問が尋ねられた/回答されてから1年で、ggplotはメンテナンスモードに入ったため、将来の更新はありません(つまり、更新を待つというOPの戦略は機能しません)。
受け入れられた答えは、凡例の周りのマージンをlegend.margin
. ggsave()
ただし、特に異なるサイズや倍率で使用する場合、これはうまく一般化できません。幸いなことに、より一般化できる普遍的な解決策があります。
legend.margin
すべての辺のパディングには 1 つの値しか取りませんがplot.margin
、上、右、下、左のマージンには 4 つの値を取ります。デフォルトの余白は、次のように (mm やインチではなく) 行に基づいています。plot.margin=unit(c(c(1, 1, 0.5, 0.5)), units="line")
0 に設定すると、ライン単位に基づいてlegend.margin
負の値を使用して、凡例をプロット エリアの端に移動できます。plot.margin
上余白を -0.5 に設定すると、完全に機能します。
ggplot(diamonds, aes(clarity, fill=cut)) +
geom_bar() +
theme(
plot.margin=unit(c(-0.5, 1, 0.5, 0.5), units="line"),
legend.position="top",
plot.background=element_rect(fill="red"),
legend.margin=unit(0, "lines")) +
guides(fill=guide_legend(title.position="top"))
凡例が下部に配置されている場合、同じ考え方が機能します。
ggplot(diamonds, aes(clarity, fill=cut)) +
geom_bar() +
theme(
plot.margin=unit(c(1, 1, -0.5, 0.5), units="line"),
legend.position="bottom",
plot.background=element_rect(fill="red"),
legend.margin=unit(0, "lines")) +
guides(fill=guide_legend(title.position="top"))
対象マージンを -0.5 行に設定している限り、余分な空白は消えるはずです。これは、任意のビューポート サイズと、任意の幅/高さ/スケールの組み合わせで機能するはずです。ggsave()