3

我有三个地块p1p2p3。我想将p2p3的图例组合并添加在p2彼此p1上方的右侧。在以下示例中,图例是相同的。在实际数据中,它们是不同的。

我使用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))

这给了我这个: 结果

我试图得到的是: 希望

我尝试使用解决问题

+ theme(legend.position=c()

+ theme(legend.justification = "top"))

但是,我无法获得所需的情节。

4

1 回答 1

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

在此处输入图像描述

于 2018-05-31T17:04:09.603 回答