ggplot2:从变量应用自定义

时间:2014-06-13 16:43:54

标签: r ggplot2

我是R和ggplot2的新手。我如何将定制应用于多个图?我以为我可以将自定义存储在变量中,但这不起作用:

# customization <- theme_bw() + xlab("time")
x <- 1:20
y <- dnorm(x, 10, 5)
y2 <- dnorm(x, 10, 2)
p1 <- ggplot() + geom_line(aes(x,y)) # + customization
p2 <- ggplot() + geom_line(aes(x,y2)) # + customization

现在我想对两个图都应用自定义,而不复制/粘贴两个额外的设置。

2 个答案:

答案 0 :(得分:1)

您可以将theme元素放在一个对象中,将标签放在另一个对象中,然后将它们与+合并。这并不像你可能希望的那样简洁,但也许它会让你成为那里的一部分。如果您有多个标签和多个theme元素,它将为您节省一些输入。例如:

x <- rep(1:20,2)
y <- c(dnorm(x[1:20], 10, 5), dnorm(x[21:40], 20, 5))
group = factor(rep(c("A","B"),each=20))
dat=data.frame(x,y,group)

opt <- theme(title=element_text(size=18, colour="green"),
             axis.text=element_text(size=13, colour="black"),
             axis.title=element_text(size=15, colour="blue"),
             legend.title=element_text(colour="black")) 
lab <- labs(x="Time", y="Value", colour="Group", title="Plot Title")

ggplot(dat) + geom_line(aes(x,y, colour=group)) + opt + lab

更新:Per @ Baptiste的评论,您可以将themelabs元素合并到一个list对象中:

custom <- list(opt, lab)

ggplot(dat) + geom_line(aes(x,y, colour=group)) + custom

答案 1 :(得分:0)

您可以将它们组合在一起,如下所示:

ggplot() + 
  geom_line(aes(x,y), color="red") + 
  geom_line(aes(x,y2), color="blue") + 
  theme_bw() + xlab("time")

给出: enter image description here