有什么好的方法可以为R中的ggplot预设绘图选项

cou*_*nt0 7 r ggplot2

我在整个文件中有一堆冗长的重复ggplot2指令.到目前为止,我一直在使用变量控制预设值,保持图形均匀,在一个点中具有配置(例如,改变所有图形的颜色).

我真正想要的是预设这些指令的好方法,所以我不必全部编写语句.作为一个例子,我在文件的顶部定义:

OPTAX=theme_text(angle=30, hjust=1, vjust=1, size=8)
Run Code Online (Sandbox Code Playgroud)

我使用的是情节陈述

P<-ggplot(
       data=MYDATA,
       aes(x=Topics, y=value, fill=variable)) +
       ....
       opts(axis.text.x=OPTAX)
)
Run Code Online (Sandbox Code Playgroud)

我想避免编写axis.text.x=MYVAR部分并写一些类似的东西

... + opts(MYOPTS) + ...
Run Code Online (Sandbox Code Playgroud)

或者完全避免opts陈述并写下来

... + ALLMYOPTS + ...
Run Code Online (Sandbox Code Playgroud)

所以我的所有选项都在一个语句中预定义.

作为第二件事,覆盖声明是好的.就像是

opts(MYOPTS, axis.text.x=theme_text(angle=60)
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*own 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))
)
Run Code Online (Sandbox Code Playgroud)

然后在多个位置使用它:(想想你将节省的空间!):

ggplot(blah) + myPrettyOptions
# in the second plot we can override the options:
ggplot(foo) + myPrettyOptions + opts(axis.text.x=theme_text(angle=60)
Run Code Online (Sandbox Code Playgroud)

您可以更进一步,准备除数据以外的所有内容:

graphtemplate = ggplot(blah) + myPrettyOptions
graphtemplate %+% data1
graphtemplate %+% data2
Run Code Online (Sandbox Code Playgroud)

注意%+%运营商的使用.


Dav*_*uer 1

这将起作用:

ALLMYOPTS <- opts(axis.text.x = theme_text(angle=30, hjust=1, vjust=1, size=8))
P + ALLMYOPTS
Run Code Online (Sandbox Code Playgroud)