ggplot主题格式可以保存为对象吗?

时间:2014-04-19 18:36:54

标签: r ggplot2

TL; DR:如何保存绘图轴文本和大小等等以使我的代码缩短?

比如说我想用不同的geom绘制不同的数据,但使用相同的轴文本大小和标题。

在编写代码中看起来像这样

ggplot(data = df, aes(x = x, y = y) + geom_line() +
    ylab("my y axis") +
    xlab("my x axis") +
    opts(title = "my title") +
    theme(axis.text=element_text(size=20),
    axis.title=element_text(size=14,face="bold"))


ggplot(data = new_df, aes(x = whatever, y = something) + geom_anythingelse() +
    ylab("my y axis") +
    xlab("my x axis") +
    opts(title = "my title") +
    theme(axis.text=element_text(size=20),
    axis.title=element_text(size=14,face="bold"))

#...

我如何保存

my_theme <-   ylab("my y axis") +
              xlab("my x axis") +
              opts(title = "my title") +
              theme(axis.text=element_text(size=20),
              axis.title=element_text(size=14,face="bold"))

作为我自己的对象,在我喜欢时添加到ggplot。 ggplot是否足够灵活以满足我的需求?

ggplot(data = df, aes(x = x, y = y) + geom_point() +
my_theme

这个问题是否违反了构建ggplot的对象命名理念?

2 个答案:

答案 0 :(得分:17)

您可以毫无问题地制作主题对象,例如:

mytheme<-theme(panel.background=element_rect(colour="green"))

如果这是您输入

的标准主题,那就更容易了
old_theme<- theme_update(panel.background=element_rect(colour="green"))

在前一种情况下,你写道:

ggplot(...)+mytheme

而在后者中,因为您的自定义主题现在是标准主题,所以只需键入:

ggplot(...)

答案 1 :(得分:10)

Stack Overflow用户baptiste在我的问题上用信息块评论我要保存的标签可以保存为列表。他提到可以将geoms和scale放入列表中,但我只测试了标签。当我测试它时,如果我将它们写入列表并且必须单独保存,则主题不起作用。

my_labels <- list(ylab("my y axis"),
             xlab("my x axis"),
             ggtitle("my title")
             )

my_theme    <- theme(axis.text=element_text(size=20),
                     axis.title=element_text(size=14,face="bold"))

ggplot(data = df, aes(x = x, y = y) + geom_line() + my_labels + my_theme