ggplot2主题:axis.text不是从文本继承的?

时间:2016-12-06 23:38:28

标签: r ggplot2

theme元素axis.text的当前文档说:

  

axis.text

     

沿轴刻度标签(element_text;从文本继承)

但似乎继承不起作用。

此代码给出了下图,轴文本为灰色。

library(ggplot2)
ggplot(data.frame(x=1:10, y=1:10), aes(x, y)) +
  geom_point(color='red') +
  theme(rect = element_rect(fill = 'black'),
        line = element_line(color = 'white'),
        text = element_text(color = 'blue'),
        panel.background = element_blank())

plot 1, wrong color

设置axis.text明确有效,但我希望代码段1已经产生了这个结果

ggplot(data.frame(x=1:10, y=1:10), aes(x, y)) +
  geom_point(color='red') +
  theme(rect = element_rect(fill = 'black'),
        line = element_line(color = 'white'),
        text = element_text(color = 'blue'),

        # *** setting this explictly ***
        axis.text = element_text(color = 'blue'),

        panel.background = element_blank())

plot 2, right color

我从一个新的R会话开始,使用此sessionInfo()

R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_2.2.0

loaded via a namespace (and not attached):
 [1] labeling_0.3     colorspace_1.2-6 scales_0.4.1     assertthat_0.1   lazyeval_0.2.0  
 [6] plyr_1.8.4       tools_3.3.1      gtable_0.2.0     tibble_1.1       Rcpp_0.12.6     
[11] grid_3.3.1       munsell_0.4.3   

如何指定高级主题元素并让这些设置通过继承级联?我是否需要以某种方式清除'默认主题?

1 个答案:

答案 0 :(得分:3)

不同之处在于,您在第一个示例中对theme()的调用会导致"不完整" theme对象。

考虑:

attr(theme(rect = element_rect(fill = 'black'),
           line = element_line(colour = 'white'),
           text = element_text(colour = 'blue'),
           panel.background = element_blank()), "complete")

这应该返回FALSE。我的理解是,当主题不完整时调用theme()并不具有所有的继承权。像theme_grey()这样的主题是完整的,所以继承有效。然而,我并非100%肯定,但文档中的这一行似乎暗示了它。

  

通过调用完整主题函数返回的对象现在是a   嵌套的主题元素及其属性列表,它们可以实现   新的主题系统,以支持属性的继承。

查看this page,特别是名为"完整且不完整的主题对象" 的部分。它讨论了与颜色相同的问题,并向您展示如何创建自己的[完整]自定义主题,其中继承有效。