Соедините наблюдения (точки и линии), не используя ggpaired - PullRequest
2 голосов
/ 15 января 2020

Я создал гистограмму, используя geom_bar с «Группой» на оси X (женский, мужской) и «Значения» на оси Y. Далее группа подразделяется на «Сессию», так что есть «Сессия 1» и «Сессия 2» как для мужчины, так и для женщины (т.е. всего четыре такта).

Поскольку все участники участвовали в сессии 1 и 2, Я наложил точечный график (geom_dot) на каждый из четырех столбцов, чтобы представить отдельные данные.

Сейчас я пытаюсь соединить наблюдения для всех участников («PID») между сеансами 1 и 2. Другими словами, должны быть линии, соединяющие несколько наборов двух точек на «мужской» части оси X (то есть для каждого участника) и "Женская часть".

Я пробовал это с "geom_line" (ниже), но безрезультатно (вместо этого он создал одну вертикальную линию в середине «Мужчина» и еще один в середине «Женщина»). Я не слишком уверен, как это исправить.

См. Код ниже:

ggplot(data_foo, aes(x=factor(Group),y=Values, colour = factor(Session), fill = factor(Session))) + 
          geom_bar(stat = "summary", fun.y = "mean", position = "dodge") + 
          geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 1.0, position = "dodge", fill = "black") +
          geom_line(aes(group = PID), colour="dark grey") +
          labs(title='My Data',x='Group',y='Values') +
          theme_light() 

Пример данных (.txt)

data_foo <- readr::read_csv("PID,Group,Session,Values
P1,F,1,14
P2,F,1,13
P3,F,1,16
P4,M,1,18
P5,F,1,20
P6,M,1,27
P7,M,1,19
P8,M,1,11
P9,F,1,28
P10,F,1,20
P11,F,1,24
P12,M,1,10
P1,F,2,26
P2,F,2,21
P3,F,2,19
P4,M,2,13
P5,F,2,26
P6,M,2,15
P7,M,2,23
P8,M,2,23
P9,F,2,30
P10,F,2,21
P11,F,2,11
P12,M,2,19")

1 Ответ

2 голосов
/ 15 января 2020

Ваша проблема в том, что вы хотите увернуться от нескольких групп . Ваш geom_line не знает, как разделить переменную Group на session. Вот два способа решения этой проблемы. Метод 1, вероятно, является наиболее «подходом ggploty» и представляет собой аккуратный способ добавления другой группировки без чрезмерной переполненности визуализации. для метода 2 вам нужно изменить переменную x

1) Использовать facet

2) Использовать interaction, чтобы разделить сеанс для каждого Group. Определите уровни для правильного порядка баров

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

Метод 1 : Facets

library(ggplot2)
ggplot(data_foo, aes(x = Session, y = Values, fill = as.character(Session))) +
  geom_bar(stat = "summary", fun.y = "mean", position = "dodge") + 
  geom_line(aes(group = PID)) +
  geom_point(aes(group = PID), shape = 21, color = 'black') +
  facet_wrap(~Group)

Создано в 2020-01-20 пакетом Представить (v0.3.0)

Метод 2 : создайте термин взаимодействия в переменной x. обратите внимание, что вам нужно заказать уровни факторов вручную.

data_foo <- data_foo %>% mutate(new_x = factor(interaction(Group,Session), levels = c('F.1','F.2','M.1','M.2')))

ggplot(data_foo, aes(x = new_x, y = Values, fill = as.character(Session))) + 
  geom_bar(stat = "summary", fun.y = "mean", position = "dodge") +
  geom_line(aes(group = PID)) +
  geom_point(aes(group = PID), shape = 21, color = 'black') 

Создано в 2020-01-20 пакетом Представить (v0.3.0)

Но все выглядит визуально не очень убедительно.

...