ПРИМЕЧАНИЕ: У меня обновлено этот пост после обсуждения с З. Линем.Первоначально я упростил свою задачу до двухфакторного дизайна (см. Раздел « Оригинальный вопрос »).Тем не менее, мои фактические данные состоят из четырех факторов, требующих facet_grid.Поэтому ниже я привожу пример четырехфакторной схемы (см. Раздел « Редактировать »).
Исходный вопрос
Давайте предположим, что Iиметь двухфакторный дизайн с dv в качестве моей зависимой переменной и iv.x и iv.y в качестве моих факторов / независимых переменных.Некоторые быстрые примеры данных:
DF <- data.frame(dv = rnorm(900),
iv.x = sort(rep(letters[1:3], 300)),
iv.y = rep(sort(rep(rev(letters)[1:3], 100)), 3))
Моя цель состоит в том, чтобы отобразить каждое условие отдельно, как это можно сделать на графиках скрипки:
ggplot(DF, aes(iv.x, dv, colour=iv.y)) + geom_violin()
Я недавно натолкнулся на графики Сины и хотел бысделать то же самое здесь.К сожалению, сюжеты Sina не делают этого, вместо этого сворачивая данные.
ggplot(DF, aes(iv.x, dv, colour=iv.y)) + geom_sina()
Также не помогает явный вызов уклонения позиции, поскольку при этом появляется сообщение об ошибке:
ggplot(DF, aes(iv.x, dv, colour=iv.y)) + geom_sina(position = position_dodge(width = 0.5))
Авторы сюжетов Sina уже были осведомлены об этой проблемев 2016 году: https://github.com/thomasp85/ggforce/issues/47
Моя проблема больше с точки зрения времени.Вскоре мы хотим представить рукопись, и сюжеты Sina были бы отличным способом отобразить наши данные.Может кто-нибудь придумать обходной путь для графиков Сины, чтобы я все еще мог отображать два фактора, как в примере с графиками скрипки выше?
Редактировать
Пример данных для четырехФакторный дизайн:
DF <- data.frame(dv=rnorm(400),
iv.w=sort(rep(letters[1:2],200)),
iv.x=rep(sort(rep(letters[3:4],100)), 2),
iv.y=rep(sort(rep(rev(letters)[1:2],50)),4),
iv.z=rep(sort(rep(letters[5:6],25)),8))
Пример с сюжетами для скрипки того, что я хотел бы создать с использованием сюжетов Sina:
ggplot(DF, aes(iv.x, dv, colour=iv.y)) +
facet_grid(iv.w ~ iv.z) +
geom_violin(aes(y = dv, fill = iv.y),
position = position_dodge(width = 1))+
stat_summary(aes(y = dv, fill = iv.y), fun.y=mean, geom="point",
colour="black", show.legend = FALSE, size=.2,
position=position_dodge(width=1))+
stat_summary(aes(y = dv, fill = iv.y), fun.data=mean_cl_normal, geom="errorbar",
position=position_dodge(width=1), width=.2, show.legend = FALSE,
colour="black", size=.2)