4

grid.arrange を使用して、いくつかのグラフを並べてプロットしようとしています。具体的には、プロットの x 軸のラベル共有し、下部に凡例を表示したいと考えています。これが私が配置に使用しているコードです(ここでの作業例)、ユニバーサルx軸はありません:

plot.c <- grid.arrange(arrangeGrob(plot.3 + 
                                 theme(legend.position="none"),
                               plot.2 + theme(legend.position="none"),
                               plot.4 + theme(legend.position="none"),
                               nrow=1),
                   my.legend, 
                   main="Title goes here", 
                   left=textGrob("Y Axis", rot = 90, vjust = 1),
                   nrow=2,heights=c(10, 1))

凡例は TableGrob オブジェクトです。ユニバーサル x 軸は、次の行に沿った textGrob である必要があります。

bottom=textGrob("X Axis")

ただし、それをコードに追加すると、凡例が右側に移動します。凡例とラベルの両方を下部に配置するように指定すると、そのうちの 1 つが右側に移動します。したがって、質問は、ユニバーサル x 軸ラベルを下部の凡例と組み合わせる方法はありますか?

4

1 に答える 1

8

同様の問題があったので、このようなものを思いつきました。

library(ggplot2)
library(gtable)
library(gridExtra)

dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
p1 <- qplot(price, carat, data=dsamp, colour=clarity) + theme(legend.position="none") + xlab("")
p2 <- qplot(price, cut, data=dsamp, colour=clarity) + theme(legend.position="none") + xlab("")
p3 <- qplot(price, color, data=dsamp, colour=clarity) + theme(legend.position="none") + xlab("")
p4 <- qplot(price, depth, data=dsamp, colour=clarity) + theme(legend.position="none") + xlab("")

legend <- gtable_filter(ggplot_gtable(ggplot_build(p1 + theme(legend.position="bottom"))), "guide-box")
lheight <- sum(legend$height)
p <- arrangeGrob(p1, p2, p3, p4, ncol=2)
theight <- unit(12, "points")
p <- arrangeGrob(p, textGrob("price", gp=gpar(fontsize=12)), heights=unit.c(unit(1, "npc") - theight, theight))
p <- arrangeGrob(p, legend, heights=unit.c(unit(1, "npc") - lheight, lheight), ncol=1)
print(p)

ここに画像の説明を入力

于 2015-04-17T03:18:29.387 に答える