用其他地块的图例绘制多个图

时间:2018-05-31 16:24:58

标签: r ggplot2 cowplot

我有三个图p1p2p3。 我想将p2p3合并,并在右侧上方添加p2p1的图例。在以下示例中,图例是相同的。在真实数据中,它们是不同的。

我使用ggplot2cowplot

# plot 1
p1 <- ggplot(iris, aes(Sepal.Length, fill = Species)) +
  geom_density(alpha = .7) 


# plot 2
p2 <- ggplot(iris, aes(Sepal.Width, fill = Species)) +
  geom_density(alpha = .7)

# plot 3
p3 <- ggplot(iris, aes(Petal.Width, fill = Species)) +
  geom_density(alpha = .7)


# legend1

legend1 <- get_legend(p1)

# legend2

legend2 <- get_legend(p2)

# combine plots
prow <- plot_grid( p2 + theme(legend.position="none"),
                   p3 + theme(legend.position="none"),
                   align = 'vh',

                   labels = c("a", "b"),

                   hjust = -1,

                   nrow = 1,
                   axis="1"

)

prow

# add legend1
p <- plot_grid( prow, legend1, rel_widths = c(1, .3))
p
# add legend2
plot_grid(p, legend2, rel_widths =c(1, .3))

这给了我这个: Result

我试图得到的是: Wish

我尝试使用

解决问题
+ theme(legend.position=c()

+ theme(legend.justification = "top"))
然而,我无法得到理想的情节。

1 个答案:

答案 0 :(得分:3)

你实际上非常接近。您可以使用ggdraw来实现您的目标。有关此问题的另一个示例,请参阅?get_legend

# combine plots
prow <- ggdraw(
  plot_grid(
    plot_grid(p2 + theme(legend.position="none") ,
               p3 +theme(legend.position="none"),
               align = 'vh',

               labels = c("a", "b"),

               hjust = -1,

               nrow = 1,
               axis="1"),
# as suggested by aosmith you can add additional columns to make legends appear closer
    plot_grid(legend1, legend2,ncol=4),
# I also set the relative widths so the legend takes up less space
nrow=1, rel_widths = c(1,0.2))
  )

prow

enter image description here