我试图为我制作的常见情节创建一个自定义的首选主题。在这些图中,我希望仅在绘图时才包含网格线。
作为一个例子,我在写了一些主题函数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 ...)
调用(如果该图是刻面的)。这可能吗?或者还有其他更好的方法吗?
答案 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()
接下来,保存要为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
这不如直接构建到主题中那么方便,但它确实有一些优点。如果您希望将主题与构面之外的网格线一起使用,则可以(例如,如果使用cowplot
构建自己的多面板)。如果您确定在一个实例中实际上不想要特殊构面设置,则可以将它们排除在外。最后,如果可以在实际主题中执行此操作,那么几乎可以认为代码多于此处所需的代码。
(也就是说,如果有人有办法做到这一点,我当然很感兴趣,并确信我会找到一种方法来利用它。)