Как изменить порядок слоев aestheti c в ggplot? - PullRequest
1 голос
/ 04 февраля 2020

Как я могу изменить порядок слоев эстетики? Вот и пример

dat <- tibble (acc = rep(c(0,1), 200),
               rt = rnorm(400, 0.5, 0.1))

dat %>% ggplot(aes(x = rt, fill = factor(acc))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)

enter image description here

Этот код изображает это изображение. Здесь зеленый (1) слой находится над красным (0) слоем. Как я могу поместить красный (0) слой поверх зеленого (1)?

Я пробовал

dat %>% ggplot(aes(x = rt, fill = factor(acc, levels = c(1,0)))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)

, но это приводит к переключению цветов и позиции!

enter image description here

Ответы [ 3 ]

5 голосов
/ 04 февраля 2020

Вы можете изменить порядок уровней factor и добавить настройку цвета:

dat %>% ggplot(aes(x = rt, 
                   fill = factor(acc, levels = c(1,0)))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)+
scale_fill_manual(values = c("1" = "#00BFC4", "0" = "#F8766D"))
1 голос
/ 05 февраля 2020

Хорошо, я просто хотел добавить ответ, касающийся палитр пивоваров, который более прост.

Итак, исходные данные:

dat <- tibble (acc = rep(c(0,1), 200),
               rt = rnorm(400, 0.5, 0.1))

dat %>% ggplot(aes(x = rt, fill = factor(acc))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)+
  scale_fill_brewer(palette = "Set1")

enter image description here

Переключение цветов

dat %>% ggplot(aes(x = rt, fill = factor(acc))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)+
  scale_fill_brewer(palette = "Set1", direction = -1)

enter image description here

Положение переключателя

dat %>% ggplot(aes(x = rt, fill = factor(acc, levels = c(1,0)))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)+
  scale_fill_brewer(palette = "Set1", direction = -1)

enter image description here

Положение и цвет переключателя

dat %>% ggplot(aes(x = rt, fill = factor(acc, levels = c(1,0)))) + 
  geom_density(aes(y= ..count..*0.03), alpha = 0.6)+
  scale_fill_brewer(palette = "Set1")

enter image description here

1 голос
/ 04 февраля 2020

Интересно. Обычно это очень просто, просто добавив direction= -1 к вашей scale_fill функции. Но это не работает в настоящее время.

Если вы хотите сохранить палитру ggplot2 по умолчанию (что, я думаю, не самая лучшая идея), тогда работает следующий подход (, вдохновленный этим ответом )

В последнем пакете scale v.1.1.0 аргумент direction = -1, кажется, нарушает функцию scale::hue_pal() ( см. Этот поток SO или в этом отчете об ошибках github ), так что здесь будет обходной путь с явным вызовом scales::hue_pal для создания вашей палитры.

library(tidyverse)

dat <- tibble(
  acc = rep(c(0, 1), 200),
  rt = rnorm(400, 0.5, 0.1)
)

dat %>% ggplot(aes(x = rt, fill = factor(acc))) +
  geom_density(aes(y = ..count.. * 0.03), alpha = 0.6) +
  scale_fill_manual(values = rev(scales::hue_pal()(length(unique(dat$acc)))))

Я обычно рекомендую использовать другие цвета, чем палитра по умолчанию. Хороший выбор - colorbrewer - очень хороший colorbrewer2.org , который поможет вам найти хорошие палитры.

Пример с использованием "Dark2":


dat %>% ggplot(aes(x = rt, fill = factor(acc))) +
  geom_density(aes(y = ..count.. * 0.03), alpha = 0.6) +
scale_fill_brewer(type = 'qual', palette = 'Dark2')

Создано в 2020-02-04 пакетом представ (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...