【问题标题】:Can ggplot theme formatting be saved as an object?ggplot主题格式可以保存为对象吗?
【发布时间】:2014-04-19 18:36:53
【问题描述】:

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

例如,我想用可能不同的几何图形绘制不同的数据,但使用相同的轴文本大小和标题。

在编造的代码中看起来像这样

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 所基于的对象命名理念?

【问题讨论】:

  • 嗯...你测试了它,它工作了吗?
  • 是的。它没有用。它对你有用吗?
  • 可以存储为主题的主题元素;另一方面,标签、几何图形、刻度等应存储为list()

标签: r ggplot2


【解决方案1】:

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

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

如果这是您输入的标准主题,那就更容易了

old_theme<- theme_update(panel.background=element_rect(colour="green"))

在前一种情况下你写:

ggplot(...)+mytheme

而在后者中,由于您的自定义主题现在是标准主题,因此只需键入:

ggplot(...)

【讨论】:

  • 那么所有的剧情元素都需要包裹在theme()中?
  • 啊,好吧,你不能将每个 ggplot 对象都放入一个主题中。为此,我将创建一个接受 ggplot 对象的函数,并在函数内部为参数添加调整。
  • 谢谢你回答我的问题
【解决方案2】:

Stack Overflow 用户 baptiste 用信息块评论了我的问题,我想保存的标签可以保存为列表。他提到可以将几何和刻度放入列表中,但我只测试了标签。当我测试它时,如果我将它们写到一个列表中并且必须单独保存,主题就不起作用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2018-02-28
    • 2018-07-06
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多