ggplot主题:仅与构面

时间:2017-03-02 08:09:55

标签: r ggplot2

我试图为我制作的常见情节创建一个自定义的首选主题。在这些图中,我希望仅在绘图时才包含网格线。

作为一个例子,我在写了一些主题函数theme_my()后,如果我写:

library(ggplot2)
theme_set(theme_my())
ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  facet_wrap(~class)

ggplot(mpg, aes(displ, hwy)) +
  geom_point()

结果与

相同
library(ggplot2)
ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  facet_wrap(~class)

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

基本上,我想知道是否可以在我的主题函数中包含某些内容,以便模板使用最终的+theme(panel.grid.major ...)调用(如果该图是刻面的)。这可能吗?或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我不确定将此功能自动化到主题中,但我倾斜的一个解决方法是保存一组theme名称,我想用于所有的构面图,然后只需添加它到情节电话。我倾向于将它用于panel.border,但这个想法对你来说应该是一样的。

首先,设置一个没有网格线的主题:

theme_set(theme_minimal() +
            theme(panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank())
          )

这将给出如下情节:

ggplot(mpg, aes(displ, hwy)) +
  geom_point()

enter image description here

接下来,保存要为theme地块设置的facet个选项组:

facetSettings <-
  theme(panel.grid.major = element_line("lightgray",0.5),
        panel.grid.minor = element_line("lightgray",0.25))

然后使用它:

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  facet_wrap(~class) +
  facetSettings

enter image description here

这不如直接构建到主题中那么方便,但它确实有一些优点。如果您希望将主题与构面之外的网格线一起使用,则可以(例如,如果使用cowplot构建自己的多面板)。如果您确定在一个实例中实际上想要特殊构面设置,则可以将它们排除在外。最后,如果可以在实际主题中执行此操作,那么几乎可以认为代码多于此处所需的代码。

(也就是说,如果有人有办法做到这一点,我当然很感兴趣,并确信我会找到一种方法来利用它。)