在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)
如何将图例放在主标题上方?
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)
还有其他方法,但这是最容易想到的方法.
这比调整边距需要更多的工作,但它应该允许对放置和大小进行更多控制。我正在使用函数 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 日创建