仅将geom默认美学更改为主题组件的一部分 - ggplot2

mar*_*kus 9 themes r ggplot2

对于自定义ggplot2主题,我想改变一些的默认美学geom,比如我想要红点而不是黑点.

这个答案我知道我们可以改变geom使用该函数的默认值,update_geom_default但我想知道是否有可能只在我们调用时改变颜色theme_red_dots

我天真尝试的例子:

library(ggplot2)

theme_red_dots <- function(...) {
  update_geom_defaults("point", list(colour = "red"))
  theme_minimal() +
    theme(...)
}
Run Code Online (Sandbox Code Playgroud)

看起来不错:

ggplot(mtcars, aes(mpg, disp)) + 
  geom_point() + 
  theme_red_dots()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是当我打电话时,我希望这些点再次变成黑色

ggplot(mtcars, aes(mpg, disp)) + 
  geom_point()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

提前致谢!


以下是我认为这可能有用的原因示例.我们可以panel.background很容易地变成黑色,但如果我们不将美学与颜色相映射,这将使得无法看到这些点.(theme_black当然可以讨论这方面的用处,但我想避免对此进行争论.)

theme_black <- function(...) {
  theme_minimal() +
    theme(panel.background = element_rect(fill = "black")) +
    theme(...)
}

# update_geom_defaults("point", list(colour = "black"))
ggplot(mtcars, aes(mpg, disp)) + 
  geom_point() + 
  theme_black()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更改内部点的颜色geom_point()是一个选项(请参阅@ zx8754答案),但这需要用户theme_black()更改它,而我想知道是否有办法在内部执行此操作theme_*.

Mik*_*ila 3

ggplot2的发布版本目前不提供执行此操作的方法。然而,这是一个相当古老的功能请求,自 2018 年夏季以来一直在开发中。