将 color brewer 应用于 ggplot 中的单行

Apply color brewer to a single line in ggplot

library(tidyverse)
library(RColorBrewer)
mtcars %>% 
  count(cyl) %>% 
  ungroup() %>% 
  ggplot(aes(cyl, n)) + 
  geom_line(size = 3) + 
  scale_color_brewer(palette = "Accent")

我经常会有一系列图表,每个图表都有颜色主题 scale_color_brewer(palette = "Accent")。我想在我的 .Rmd 文件中的所有图表上维护这个主题。但是,此 scale_color_brewer() 仅在每个图上有多条线时才有效。

对于上述情况(单行),我如何应用 scale_color_brewer(palette = "Accent"),而不是在 geom_line() 中指定唯一颜色作为参数?我希望有比手动过程更好的解决方案。使用不同的主题并且必须查找所有不同的 CMYK 值变得乏味。

您可以随时设置颜色美学并关闭图例

mtcars %>% 
  count(cyl) %>% 
  ungroup() %>% 
  ggplot(aes(cyl, n, color="A")) + 
  geom_line(size = 3) + 
  scale_color_brewer(palette = "Accent", guide="none")

你可以做两件事来消除单调乏味的是将你想要继续使用的调色板保存到一个变量,并设置几何默认值。我经常这样做是为了让几个调色板随时可以在整个文档中使用,比如一个定性调色板和一个连续调色板。

update_geom_defaults 获取指定 geom 的默认参数列表,但您仍然可以添加或覆盖这些默认值,如下所示。

library(dplyr)
library(ggplot2)

accent <- RColorBrewer::brewer.pal(7, "Accent")
# item 6 is hot pink
update_geom_defaults("line", list(color = accent[6]))

mtcars %>% 
  count(cyl) %>% 
  ggplot(aes(x = cyl, y = n)) + 
    geom_line()

mpg %>%
  group_by(year) %>%
  summarise(avg_cty = mean(cty)) %>%
  ggplot(aes(x = year, y = avg_cty)) +
    geom_line(size = 2)

mpg %>%
  group_by(year) %>%
  summarise(avg_hwy = mean(hwy)) %>%
  ggplot(aes(x = year, y = avg_hwy)) +
  geom_line(color = accent[1])

至于在不通过十六进制代码排序的情况下知道调色板中的每种颜色是什么,RColorBrewer::display.brewer.pal 很方便,其他包(如 rcartocolor 中的类似功能也是如此。我有一个我经常使用的实用函数包,我写了一个 function 来显示十六进制代码向量中的每种颜色的块,因为否则它会非常乏味。