Применить цветной пивовар к одной строке в ggplot - PullRequest
4 голосов
/ 15 апреля 2019
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 становится утомительным.

Ответы [ 2 ]

6 голосов
/ 15 апреля 2019

Две вещи, которые вы можете сделать, чтобы убрать скуку, - это сохранить палитру (ы), которые вы хотите использовать в переменной, и установить значения по умолчанию для geom.Я часто делаю это для того, чтобы пара палитр была готова к использованию по всему документу, например, одна качественная и одна непрерывная.

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])

Asдля определения того, что представляет собой каждый цвет в палитре без сортировки шестнадцатеричных кодов, удобна RColorBrewer::display.brewer.pal, как и аналогичные функции в других пакетах, таких как rcartocolor.У меня есть пакет служебных функций, который я часто использую, когда написал функцию для отображения блоков каждого цвета в векторе шестнадцатеричных кодов, потому что в противном случае это довольно утомительно.

4 голосов
/ 15 апреля 2019

Вы всегда можете установить эстетику цвета и просто отключить легенду

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