全局向脚本中的所有ggplot对象添加标题

时间:2018-06-20 16:17:13

标签: r ggplot2 global

可以使用ggplot全局设置theme_set()主题。

是否有一种方法可以向所有ggplot对象全局添加一个几何图形,例如labs(caption="run ID #")?我想将标题自动应用于下游的所有ggplots。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作。我找不到我的原始答案

library(ggplot2)

my_predefined_category_order = c("8", "6", "4")

my_labs  = list(labs(caption = "run ID #"))

my_xaxis = list(xlab("My axis title"),
                scale_x_discrete(limits = my_predefined_category_order),
                theme(axis.text.x = element_text(angle = 90, vjust = 0.5)))

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

p <- ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_point()

# Add predefined settings
p + my_labs + my_xaxis + my_theme

reprex package(v0.2.0)于2018-06-20创建。

答案 1 :(得分:0)

到目前为止,似乎没有简单的方法可以做到这一点,所以我已经在ggplot()包/名称空间中编辑了ggplot2函数本身。

我不喜欢这种解决方案,但目前可以解决该问题。对于此方法的缺点,我表示感谢。


我们作图。

library(ggplot2)

ggplot(mtcars, aes(x=disp, y=mpg, col=as.factor(cyl))) +
  geom_point()

enter image description here

现在,我们自己编辑ggplot()函数,并为将输出的 all 图添加默认标题。

ggplot.data.frame.original <- ggplot2:::ggplot.data.frame

ggplot.data.frame.custom <- function (data = NULL, mapping = aes(), ..., environment = parent.frame()) 
{
  ggplot.data.frame.original(fortify(data, ...), mapping, environment = environment) +
    labs(caption="My Custom Caption")
}

unlockBinding("ggplot.data.frame", environment(ggplot))
assignInNamespace("ggplot.data.frame", ggplot.data.frame.custom, ns="ggplot2",
                  envir=environment(ggplot)) 
assign("ggplot.data.frame", ggplot.data.frame.custom, envir=environment(ggplot))
lockBinding("ggplot.data.frame", environment(ggplot))

我们执行相同的代码来生成如上所示的图,但是这次出现了默认标题。

ggplot(mtcars, aes(x=disp, y=mpg, col=as.factor(cyl))) +
  geom_point()

enter image description here