在 ggplot2 主题中包含 guide()

Include guide() in ggplot2 theme

我们的组织有一本非常严格的风格书,所以我的任务是创建一个 ggplot 主题,程序员可以使用它来确保他们的图表和图形尽可能接近“官方”风格。

其中一个要求是图表的图例位于图表下方,但垂直堆叠,如下所示:

我一直在通过以下方式生成这样的图形:

pie_theme <- theme(
    text = element_text(family = "Arial", face = "bold", size = 7, color = "black"),
    plot.caption = element_text(hjust = 0, size = 6),
    legend.position = "bottom",
    etc.
    )
    
    p1 <- ggplot(bla bla bla)+geom_bar(bla bla bla)+coord_polar(bla bla bla)
    
    p1+ guides(fill=guide_legend(ncol=1)) +
      pie_theme

理想情况下,我想将 guides() 命令集成到主题中,这样程序员就不必在每次输出图表时都添加 guides() 并且图例会自动垂直堆叠。但是我没有看到可以做到这一点的 theme() 属性。有什么建议吗?

谢谢!

ggplot 对象和列表的 + 操作使得列表的每个元素都单独添加到绘图中。为此,您可以将主题和指南包装在一个列表中,然后您可以像添加常规主题一样添加它。

提醒一句,如果您将连续变量映射到指南,它将尝试选择 guide_legend() 而不是 guide_colorbar(),如果您在这样。

library(ggplot2)

pie_theme <- list(
  theme(
    text = element_text(face = "bold", size = 7, color = "black"),
    plot.caption = element_text(hjust = 0, size = 6),
    legend.position = "bottom"
  ),
  guides(fill = guide_legend(ncol = 1))
)

ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) +
  geom_bar(width = 1) +
  coord_polar(theta = "y") +
  pie_theme

reprex package (v0.3.0)

于 2020-12-23 创建