ggplot theme():为什么改变线条颜色没有任何作用?

mva*_*man 0 themes r ggplot2

我想我一定是误解line =了 中的论点theme()。根据 中的文档?themeline =应该会影响图中的所有线元素。然而,改变颜色没有任何作用,而改变大小却起作用。

library(ggplot2)
ggplot(iris, aes(x = Sepal.Width, Petal.Length)) +
  geom_point() +
  geom_smooth() +
  theme(line = element_line(color = "green", size = 5))
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 8 月 15 日创建(v2.0.1)

我的问题有两个:

  1. 为什么更改颜色不会影响图中的任何线条?

  2. 为什么更改尺寸不会影响 中的线条元素geom_smooth()

编辑:请参阅@Gregor Thomas 的答案以获取第 2 部分的答案。

teu*_*and 5

这些元素确实如所宣传的那样继承,但是,它们可能有介于 childpanel.grid.major.x和 grandparent之间的父母line。例如theme_gray(),默认情况下的 就是这种情况。要测试这一点,您可以手动将所有主题元素设置为“空”元素。就像这样:

library(ggplot2)

my_theme <- theme_get() # Default theme gray
my_theme[] <- lapply(my_theme, function(elem) {
  switch(
    class(elem)[[1]],
    "element_text" = element_text(),
    "element_line" = element_line(),
    "element_rect" = element_rect(),
    elem
  )
})
Run Code Online (Sandbox Code Playgroud)

因此,在消除了孩子和祖父母之间的所有步骤后,所有继承都应按其应有的方式进行。

ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
  geom_point() +
  my_theme +
  theme(
    line = element_line(colour = "green"),
    axis.line = element_line() # was `element_blank()` by default
  )
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 8 月 15 日创建(v2.0.1)

  • @r2evans 这种继承方法有一些实用性。如果您设置顶部的“text = element_text()”,它不会改变“axis.title.y.right”的角度(例如,它在上图中的位置很尴尬,因为它是空的)。但是,是的,它使默认主题继承起来有点笨拙,我同意这一点。 (3认同)