7

我在整个文件中有一堆冗长的重复 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)

会很棒,所以我可以保留预设但仍然使用自定义选项。

4

4 回答 4

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

注意%+%运算符的使用。

于 2012-08-30T18:43:55.573 回答
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)
于 2012-08-30T18:28:14.667 回答
1

这将起作用:

ALLMYOPTS <- opts(axis.text.x = theme_text(angle=30, hjust=1, vjust=1, size=8))
P + ALLMYOPTS
于 2012-08-30T16:27:08.753 回答
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
于 2016-10-17T16:57:46.300 回答