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)