ggplot2 - использование двух разных цветовых шкал для одинаковой заливки наложенных участков

Вопрос очень похож на вопрос, который задан здесь. Однако в этой ситуации параметры заполнения для двух графиков различаются. В моей ситуации параметр заливки одинаков для обоих графиков, но мне нужны разные цветовые схемы.

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

Пример:

require(dplyr)
require(ggplot2)

n<-4*3*10
myvalues<- rexp((n))
days    <- ntile(rexp(n),4)
doses   <- ntile(rexp(n), 3)

test    <- data.frame(values =myvalues, 
                      day = factor(days,   levels = unique(days)),
                      dose = factor(doses, levels = unique(doses)))

p<- ggplot(data = test, aes(x = day, y = values)) + 
    geom_boxplot( aes(fill = dose))+
    geom_point(   aes(fill = dose), alpha = 0.4, 
    position = position_jitterdodge())

создает такой сюжет:  введите описание изображения здесь

Использование scale_fill_manual () заменяет эстетику как на прямоугольной, так и на точечной диаграмме.

Я нашел хитрость, добавив «цвет» к geom_point, а затем, когда я использую scale_fill_manual (), цвета точки разброса не меняются:

p<- ggplot(data = test, aes(x = day, y = values)) + 
    geom_boxplot(aes(fill = dose), outlier.shape = NA)+
    geom_point(aes(fill = dose, colour = factor(test$dose)),
             position = position_jitterdodge(jitter.width = 0.1))+
    scale_fill_manual(values = c('white', 'white', 'white'))

Это то, что я хочу

Есть ли более эффективные способы получить такой же результат?


person Tkanno    schedule 24.07.2018    source источник


Ответы (1)


Вы можете использовать group для установки различных коробчатых диаграмм. Не нужно выставлять заливку и потом ее перезаписывать:

ggplot(data = test, aes(x = day, y = values)) + 
    geom_boxplot(aes(group = interaction(day, dose)), outlier.shape = NA)+
    geom_point(aes(fill = dose, colour = dose),
             position = position_jitterdodge(jitter.width = 0.1))

И вы никогда не должны использовать data$column внутри aes - просто используйте пустой столбец. Использование data$column будет работать в простых случаях, но сломается всякий раз, когда есть stat слоев или фасетов.

person Gregor Thomas    schedule 24.07.2018
comment
Именно то, что я ищу, Спасибо. Каким-то образом я оставался в неведении относительно взаимодействия () до сих пор в моей короткой карьере в R / ggplot. - person Tkanno; 24.07.2018
comment
interaction обычно не используется - но это то, для чего он предназначен. Здесь будет работать все, что связывает переменные вместе. Многие люди просто будут использовать paste или paste0 (что в этом простом случае ничем не отличается). - person Gregor Thomas; 24.07.2018