如何更改ggplot2中的默认主题?

时间:2011-03-28 01:35:21

标签: r ggplot2

背景

我想更改ggplot使用的主题,但我很难理解theme_update()文档和示例。

我正在使用align_plots()在密度图上放置一个箱线图,但我发现没有任何代码导致错误,并留下了最小的例子。我怀疑该错误是由theme_blank()的使用引起的,但我不确定它为什么会发生或我如何解决它。

所以,在这里,我提供了一个最小的可重现的错误示例:

library(ggExtra)
align.plots(qplot(1))

但是在我更新主题后它会中断:

newtheme <- theme_update(axis.text.y = theme_blank(),
                         axis.line = theme_blank(),
                         axis.title.x = theme_blank(), 
                         axis.title.y = theme_blank(),
                         axis.ticks.x = theme_blank(),
                         panel.grid.major = theme_blank(),
                         panel.grid.minor = theme_blank(),
                         panel.border = theme_blank(),
                         axis.color.y = 'white')
align.plots(qplot(1))

这给出了错误:

Error in UseMethod("validGrob") : 
  no applicable method for 'validGrob' applied to an object of class "NULL"
In addition: Warning message:
In editThisGrob(grob, specs) : Slot 'vp' not found

问题:

  1. 导致此错误的原因是什么?

  2. 在哪里可以获得有关使用?theme_update()的更多信息?我在ggplot文档中得到了这么多,并且在ggplot website找不到答案,尽管我得到的最接近的是polishing.r脚本

  3. 注意:

    对于另一个问题,基于Hadley's suggestion的解决方案出现了同样的错误。

    opt <- opts(...)
    align.plots(qplot(1) + opt)
    

    其中...是上面theme_update()的内容

2 个答案:

答案 0 :(得分:7)

我不知道为什么会这样,但确实如此。只需在调用align.plots之前插入行theme_set(newtheme)

答案 1 :(得分:1)

它可能被认为是ggExtra :: align.plots()中的一个错误。此函数计算ggplot的不同元素的大小,例如y轴标签和图例,并相应地对齐图形以使绘图面板彼此重叠。如果你将主题设置为对某些图形元素使用theme_blank(),那么函数就会被混淆,因为底层的grob(ggplot2 :::。zeroGrob)与其他grob不同。

虽然它可以修复(*),但我认为你最好考虑其他选择:

  • 使用虚拟构面变量让ggplot2自动对齐两个面板

  • 使用gridExtra :: grid.arrange()或普通网格视口将两个图表放在一起;因为你删除了可能抵消情节位置的元素,所以应该没有问题。

(*):现在已修复,请尝试

   source("http://ggextra.googlecode.com/svn/trunk/R/align.r")