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

Dav*_*uer 8 r ggplot2

背景

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

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

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

library(ggExtra)
align.plots(qplot(1))
Run Code Online (Sandbox Code Playgroud)

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

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))
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

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
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是什么导致这个错误?

  2. 我在哪里可以获得有关使用的更多信息?theme_update()?我得到这个远在ggplot文件,并不能找到的答案ggplot网站,但我得到的最接近是polishing.r脚本

注意:

基于哈德利对另一个问题的建议,我得到了同样的错误.

opt <- opts(...)
align.plots(qplot(1) + opt)
Run Code Online (Sandbox Code Playgroud)

上面...的内容在哪里theme_update()

Ram*_*ath 7

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


bap*_*ste 2

它可以被认为是 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")
Run Code Online (Sandbox Code Playgroud)