手动定位Patchwork中的图例位置。

9

我想在一个拼贴布局的空白区域中放置一个图例 (适用于所有子图)。根据我在网上找到的资料,如果我使用 guides="collect" (但可以使用 left、right 等),就不能使用 legend.position 手动定位图例。

我尝试过使用 l <- get.legend,然后再使用 + inset_element(l, 0.6, 0.6, 1, 1),但它无法识别 l。我还尝试了混入 + inset_element(gridExtra::tableGrob(l)),但没有成功。

我的目标是将图例放置在空白区域中。我的实际拼贴图更复杂,但有两个空白区域我希望图例放在其中。

最小工作示例:

library(patchwork)    
library(ggplot2)
p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp, color = mpg)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3')    

design <- "
1111
223#
"    
p1 + p2 + p3  + plot_layout(guides = 'collect') + plot_layout(design=design, guides = "collect")  &
  theme(legend.position = 'right',
        legend.direction = 'vertical')
1个回答

16

修改您的design对象以包括第四个元素,并使用guide_area()将指南放置在其中。

library(patchwork)    
library(ggplot2)

design <- "
1111
2234
"    
p1 + p2 + p3 + guide_area() + plot_layout(design=design, guides = "collect") 

输入图像描述


1
有没有办法在guide_area()内定位图例?例如,在这个例子中,你能把它推到最右边吗? - rrr
好问题。我不知道目前的API有什么方法可以做到这一点。我想通过操作grob或者也许更简单的解决方法是玩弄设计元素的比例,在导航线左侧插入空白区域。如果你想得到一个正确的答案,最好发布一个新问题。 - Ritchie Sacramento

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接