将图例放在主标题上方

Ref*_*xes 4 r legend ggplot2

ggplot2使用时将图例放在主标题上方theme(legend.position = "top")似乎是以前版本的ggplot中的默认(和不需要的)结果:ggplot图例在顶部但在标题下面?

在当前版本中ggplot2,图例在设置时将其自身置于绘图和主标题之间theme(legend.position = "top").一个小例子:

d <- data.frame(x = 1:2, y = 1:2, z = c("a", "b")) 
ggplot(d, aes(x = x, y = y, fill = z)) + 
  geom_col() +
  ggtitle("My title") +
  theme(legend.position = "top") 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何将图例放在主标题上方?

hrb*_*str 6

library(ggplot2)

ggplot(mtcars, aes(wt, mpg, color=cyl)) +
  geom_point() +
  labs(title = "Hey") +
  theme(plot.margin = margin(t=4,1,1,1, "lines")) +
  theme(legend.direction = "horizontal") +
  theme(legend.position = c(0.5, 1.2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

还有其他方法,但这是最容易想到的方法.


cam*_*lle 5

这比调整边距需要更多的工作,但它应该允许对放置和大小进行更多控制。我正在使用函数 from cowplot:get_legend从图中提取图例,并plot_grid创建这两个ggplot元素的网格。

p用图例创建绘图后,cowplot::get_legend(p)然后创建一个ggplot只是图例的对象。重新定位它们,plot_grid同时添加theme从 中删除图例的调用p。您可能想要调整高度并调整边距。

library(ggplot2)

p <- ggplot(d, aes(x = x, y = y, fill = z)) + 
  geom_col() +
  ggtitle("My title") +
  theme(legend.position = "bottom") 

legend <- cowplot::get_legend(p)

cowplot::plot_grid(
  legend,
  p + theme(legend.position = "none"),
  ncol = 1, rel_heights = c(0.1, 1)
)
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.2.1)于 2018 年 10 月 12 日创建