ggplot обратный порядок шкал цветоделения для отдельных переменных - PullRequest
0 голосов
/ 29 апреля 2019
library(tidyverse)
library(RColorBrewer)
mtcars %>% 
  count(cyl) %>% 
  ungroup() %>% 
  ggplot(aes(cyl, n, color = "A")) + 
  geom_line(size = 2) + 
  # scale_color_brewer(palette = "Accent", guide = "none") +  # line 8
  scale_color_brewer(palette = "Accent", direction = -1, guide = "none") + 
  NULL

Я думал, что аргумент direction = -1 в ggplot обратит цветовую шкалу. Независимо от того, включаю я этот аргумент или нет, я все равно получаю тот же график, показанный ниже.

direction1

Я бы подумал, что если оставить аргумент выключенным, я получу график, показанный выше, так как зеленый является первым цветом Accent. Если я включу аргумент direction = -1, я ожидаю, что geom_line() будет использовать последний цвет Accent, темно-серый, но это не то, что происходит.

accent

Как правильно изменить цветовую шкалу, чтобы сначала появился темно-серый? Я знаю, что мог бы просто использовать geom_line(aes(color = "dark grey")), но я бы предпочел ответ на этот вопрос, в отличие от этого «самого простого решения».

1 Ответ

1 голос
/ 29 апреля 2019

Аргумент direction берет цвета, назначенные шкале, и переворачивает их (поэтому тот, который назначен последнему значению в шкале, назначен первому).Это не меняет , какие цвета назначены шкале.Вы не видите никакого эффекта, поскольку существует только одно возможное значение цвета, поэтому изменение масштаба не вызывает изменений.Сравните эти 2 примера:

ggplot(diamonds, aes(x = price, fill = cut)) +
    geom_histogram(position = "dodge", binwidth = 1000) +
    scale_fill_brewer(palette='Accent')

enter image description here

ggplot(diamonds, aes(x = price, fill = cut)) +
    geom_histogram(position = "dodge", binwidth = 1000) +
    scale_fill_brewer(palette='Accent', direction = -1)

enter image description here

Вы можете видетьчто выбранные цвета одинаковы, меняется только порядок, которому они назначены cut.

Если вы хотите изменить порядок выбранных цветов, вы можете использовать scale_color_manual, передать в палитреиспользуя brewer.pal, а затем переверните и / или установите его там по желанию:

mtcars %>% 
    count(cyl) %>% 
    ungroup() %>% 
    ggplot(aes(cyl, n, color = "A")) + 
    geom_line(size = 2) + 
    scale_color_manual(values = rev(brewer.pal(8, 'Accent')))

enter image description here

...