我在整个文件中有一堆冗长的重复ggplot2指令。到目前为止,我一直在使用变量控制预设值来保持图形均匀,将配置放在一个点上(例如,改变所有图形的颜色)。
我真正想要的是预设这些指令的好方法,所以我不必全部编写语句。例如,我在文件的顶部定义:
OPTAX=theme_text(angle=30, hjust=1, vjust=1, size=8)
在情节陈述中,我使用
P<-ggplot(
data=MYDATA,
aes(x=Topics, y=value, fill=variable)) +
....
opts(axis.text.x=OPTAX)
)
我想避免编写axis.text.x=MYVAR
部分并编写类似
... + opts(MYOPTS) + ...
或完全避免使用opts语句并编写
... + ALLMYOPTS + ...
所以我的所有选项都在一个语句中预定义。
作为第二件事,覆盖声明是好的。像
这样的东西opts(MYOPTS, axis.text.x=theme_text(angle=60)
会很棒,所以我可以保留预设但仍然使用自定义选项。
答案 0 :(得分:11)
您可以使用列表包装各种ggplot配置 - 而不仅仅是opts
- 并将其应用于多个图表:
myPrettyOptions = list(
opts(axis.text.x=OPTAX),
facet_wrap(~Topic),
limits(x=c(1,2)),
scale_x_discrete(expand=c(0,0,5))
)
然后在多个位置使用它:(想想你将保存的空间!):
ggplot(blah) + myPrettyOptions
# in the second plot we can override the options:
ggplot(foo) + myPrettyOptions + opts(axis.text.x=theme_text(angle=60)
您可以更进一步,准备除数据以外的所有内容:
graphtemplate = ggplot(blah) + myPrettyOptions
graphtemplate %+% data1
graphtemplate %+% data2
请注意使用%+%
运算符。
答案 1 :(得分:4)
更简洁的方法涉及使用theme_update,theme_get和theme_set方法。
old.theme <- theme_update(axis.text.x = theme_text(angle=30, hjust=1, vjust=1, size=8))
qplot(1,1)
如果您想恢复旧的主题使用,只需
theme_set(old.theme)
qplot(1,1)
答案 2 :(得分:1)
这将有效:
ALLMYOPTS <- opts(axis.text.x = theme_text(angle=30, hjust=1, vjust=1, size=8))
P + ALLMYOPTS
答案 3 :(得分:0)
首先将每个参数放在一个对象中,例如:
a<- theme(axis.title.y = element_text(angle = 0))
b<- theme(panel.background = element_rect(fill = "#e4e4e4")) + theme(axis.title.y = element_text(angle = 0, size=rel(1.5)))+ theme(axis.title.x=element_text(size=rel(1.5))) + theme(legend.text=element_text(size=rel(1.5)))+ theme(legend.title=element_text(size=rel(1.5), face = "italic")) + theme(plot.title = element_text(size = rel(1.5))) + theme(axis.text = element_text(size=rel(1.0)))
c<- theme(axis.line.x=element_line(size=0.5, colour="black"))
d<- theme(axis.line.y=element_line(size=0.5, colour="black"))
e<- theme(legend.box.just = c("top"), legend.position="bottom",legend.justification=c(1,1), legend.direction="vertical", legend.box="horizontal") + theme(panel.grid.minor.y = element_blank())
f<- ggplot(blah) + a +b +c +d +e
f