R ggplot主题:仅带面的网格线

R ggplot主题:仅带面的网格线,r,ggplot2,R,Ggplot2,我正在尝试为我制作的普通情节创建一个自定义的转到主题。在这些图中,我希望仅当图是分面的时才包含网格线 例如,我在编写一些主题函数theme\u my()之后,如果我编写: library(ggplot2) theme_set(theme_my()) ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class) ggplot(mpg, aes(displ, hwy)) + geom_point() 结果与实验结果一

我正在尝试为我制作的普通情节创建一个自定义的转到主题。在这些图中,我希望仅当图是分面的时才包含网格线

例如,我在编写一些主题函数
theme\u 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())

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

我不确定是否要将其自动化到一个主题中,但我所依赖的一个解决方法是保存一组我希望用于所有方面绘图的
主题
指定,然后将其添加到绘图调用中。我倾向于将其用于
面板.border
,但这个想法对您也适用

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

theme_set(theme_minimal() +
            theme(panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank())
          )
这将给出如下图:

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

接下来,保存要为
facet
绘图设置的
主题
选项组:

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

这并不像将其直接构建到主题中那样方便,但它确实有一些优势。如果您想要在刻面外使用网格线的主题,您可以(例如,如果使用
cowplot
构建自己的多面板)。如果您决定在一个实例中实际上不需要特殊的方面设置,则可以排除它们。最后,如果在一个实际的主题中可以做到这一点,那么几乎可以肯定的是,它将比这里需要的代码更多


(这就是说,如果有人有办法做到这一点,我肯定会感兴趣并确信我会找到利用它的方法。)

这不是一种非常不方便的方法,而且绝对是一种合理的选择。但是,让我们看看是否还有其他建议!
ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  facet_wrap(~class) +
  facetSettings