如何在R中使用ggplot2创建默认自定义主题

use*_*672 10 themes r ggplot2

当我尝试使用ggplot2它来应用自定义主题时会出现如下错误:

Error in FUN("text"[[1L]], ...) : 
  Theme element 'text' has NULL property: family, face, size, hjust, vjust, angle, lineheight
Run Code Online (Sandbox Code Playgroud)

我想我必须错过一些基本的东西(我第一次尝试创建自定义主题).该主题基于以下内容创建theme_bw():

theme_new <- function(base_size = 12, base_family = "Helvetica"){
    theme_bw(base_size = base_size, base_family = base_family) %+replace%
    theme(
        line = element_line(colour="black"),
        text = element_text(colour="black"),
        axis.title = element_text(size = 14),
        axis.text = element_text(colour="black", size=8),
        strip.text = element_text(size=12),
        legend.key=element_rect(colour=NA, fill =NA),
        panel.grid = element_blank(),   
        panel.border = element_rect(fill = NA, colour = "black", size=1),
        panel.background = element_rect(fill = "white", colour = "black"), 
        strip.background = element_rect(fill = NA)
        )
    }
Run Code Online (Sandbox Code Playgroud)

然后尝试一下:

x < - rnorm(10)

theme_set(theme_new())

qplot(x)的

得到以上错误!

然而:

theme_set(theme_bw())

qplot(x)的

工作良好!

我想这个stackoverflow帖子中描述的theme_update 与使用theme_set()更改默认主题不同.如果我们在这个小插图(http://docs.ggplot2.org/dev/vignettes/themes.html)中查看新的主题指南,我的理解是,一个EITHER需要指定所有主题参数并使用它complete=TRUE来告诉它; 或者使用 %+replace%运算符向旧主题添加内容,例如theme_bw().不要得到它!

Kha*_*haa 7

http://docs.ggplot2.org/dev/vignettes/themes.html的简要介绍揭示

因此,在使用%+ replace%运算符创建新的主题函数时,需要非常小心地替换继承层次结构顶部的主题元素,如text,line和rect.

...

请注意,theme_bw中替换的主题元素主要在theme_grey()中具有NULL属性,因为后者中的大多数默认属性都是在元素rect,line和text中定义的,并传递给它们的子元素.%+ replace%运算符用于在theme()中指定的所选元素中设置非NULL属性,并将所有未声明的属性设置为NULL.

所以,你应该注释掉规格包括line,text,rect因为他们在父主题已经定义:theme_bwtheme_grey.

theme_new <- function(base_size = 12, base_family = "Helvetica"){
  theme_bw(base_size = base_size, base_family = base_family) %+replace%
    theme(
      #line = element_line(colour="black"),
      #text = element_text(colour="black"),
      axis.title = element_text(size = 14),
      #axis.text = element_text(colour="black", size=8),
      #strip.text = element_text(size=12),
      legend.key=element_rect(colour=NA, fill =NA),
      panel.grid = element_blank(),   
      panel.border = element_rect(fill = NA, colour = "black", size=1),
      panel.background = element_rect(fill = "white", colour = "black"), 
      strip.background = element_rect(fill = NA)
      )
}
Run Code Online (Sandbox Code Playgroud)

qplot(x) + theme_new() 生成以下图像,其中包含一系列与字体相关的警告. 在此输入图像描述

在不同的机器上,它几乎产生了我试过的没有任何警告的情节,所以我猜它有效!例如,http://www.cookbook-r.com/Graphs/Scatterplots_ ( ggplot2)/中的第二组图表被复制为在此输入图像描述