为所有情节设置主题和调色板

时间:2018-06-07 12:22:34

标签: r ggplot2

我试图在ggplot2中简化我的情节。假设我想从虹膜数据集创建一个散点图:

ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point()

Iris scatterplot

但是假设我不喜欢ggplot2默认主题和调色板。我们想说我想使用theme_bwDark2调色板:

ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point() +
  theme_bw() +
  scale_color_brewer(palette="Dark2")

Iris scatterplot with another colour palette

假设我有很多情节,我希望所有情节都使用theme_bwDark2调色板。我知道我可以使用theme_set(theme_bw())使我的所有情节都有黑白主题。是否有类似的功能使我的所有情节都使用Dark2调色板?换句话说,我该如何运行像

这样的代码
ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point()

并在我的所有情节中都有theme_bwDark2调色板?

2 个答案:

答案 0 :(得分:2)

一种解决方案是编写自定义包装器:

ggcust <- function(...){
  ggplot(...) +
    theme_bw()
}

填写您需要的所有theme选项,然后像这样使用它:

ggcust(data = mtcars, aes(x = mpg, y = cyl)) +
  geom_point()

enter image description here

答案 1 :(得分:1)

您还可以将图层放入list

gglayer_theme <- list(
  theme_bw(),
  scale_color_brewer(palette="Dark2")
)

并将列表视为新图层(注意+在此列表符号中变为,):

ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point() +
  gglayer_theme

自定义包装方法的优点是可以轻松混合图层:

gglayer_labs <- list( 
  labs(
    x = "x",
    y = "y"
  )
)

ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point() +
  gglayer_theme +
  gglayer_labs

或预先组合它们:

gglayer_all <- c(gglayer_theme, gglayer_labs)

ggplot(iris, aes(x=Petal.Length, y=Petal.Width, colour=Species)) +
  geom_point() +
  gglayer_all