R Скрипки и боксы вместе, заставляют заливку вести себя по-разному только для боксов

Итак, я хочу построить графики для скрипки вместе с белыми коробками, но мои данные немного сложнее. Я объединил данные из data.frame с несколькими столбцами, каждый из которых имеет значения, соответствующие коэффициенту с двумя уровнями, вот примерная оценка моих данных:

library(ggplot2)
library(reshape2)

dat <- list(
  A = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  ),
  B = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  ),
  C = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  )
)

dat.melt <- melt(dat)

Лучшее, что я мог найти, - это установить заливку вручную, но это влияет как на скрипку, так и на коробку:

dodge <- position_dodge(width = 1)

p <- ggplot(dat.melt, aes(x = L1, y = value, fill = group))+
  geom_violin(position = dodge)+
  geom_boxplot(width = 0.3,
                 position = dodge,
                 outlier.shape = NA)+
  scale_fill_manual(values=c("white", "white"))

Сюжет

Могу ли я сделать только боксплоты белыми, а не скрипками?

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

2 ответа

Решение

Попробуй это:

p <- ggplot(dat.melt, aes(x = L1, y = value)) +
  geom_violin(aes(fill = group), position = dodge) +
  geom_boxplot(aes(group=interaction(group,L1)), 
            width=0.3, fill="white", position=dodge,
            outlier.shape=NA)
print(p)

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

Вы также можете попробовать это:

ggplot(dat.melt, aes(x = L1, y = value, fill=group))+
  geom_violin(position = position_dodge(width = 1)) +
  geom_boxplot(data = dat.melt, 
               aes(x = L1, y = value, col=group), fill="white", 
               position = position_dodge(width = 1), width=0.3,outlier.shape=NA)+
  geom_boxplot(position = position_dodge(width = 1), alpha=0, width=0.3)

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

Другие вопросы по тегам