соединительные линии между средствами факторов в ggplot2

Я пытался создать простой линейный график средств и взаимодействий. У меня есть DV (время чтения) по оси y, один фактор (длина) по оси x, а другой - как группирующая переменная (позиция).

Синтаксис, который я использовал, приведен ниже. Данные нанесены на график в виде отдельных точек на линии для каждого из двух условий длины, но не связаны линиями между двумя условиями длины. Что мне не хватает с точки зрения синтаксиса?

Я использую R i386 2.15.2 и обновил ggplot2 на прошлой неделе.

Вот воспроизводимый пример

SubjectID <- c(101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,102,
        201,201,201,201,201,201,201,201,202,202,202,202,202,202,202,202)
Group <- c("PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA",
        "PWA","PWA","PWA","PWA","PWA","Control","Control","Control",
        "Control","Control","Control","Control","Control","Control",
        "Control","Control","Control","Control","Control","Control",
        "Control")
Length <- c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2)
Pos <- c(1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2)
ReadT <- c(6.7,7.6,6.4,7.9,5.4,6.4,6.3,7.4,6.9,7.2,6.7,7.4,5.7,6.1,6.5,7.8,
        6.1,5.7,4.9,6.1,4.7,6.5,6.1,6.2,6.9,5.9,4.8,6.5,4.6,6.3,6.7,6.6)

data <- data.frame (SubjectID, Group,Length,Pos,ReadT)
data$Length <- factor(data$Length, order = TRUE,
        levels = c(1,2),
        labels = c("Length 1", "Length 2"))
data$Pos <- factor(data$Pos, order = TRUE,
        levels = c(1,2),
        labels = c("Position 1", "Position 2"))

qplot(Length, data=data, ReadT, geom=c("point", "line"), 
    stat="summary", fun.y=mean, group=Pos, colour=Pos, 
    facets = ~Group)

person user2112401    schedule 26.02.2013    source источник
comment
Пожалуйста, предоставьте воспроизводимый пример - добавьте образцы данных, предпочтительно используя dput ()   -  person Didzis Elferts    schedule 26.02.2013


Ответы (1)


Я не думаю, что вы воспроизвели какое-либо несоответствие, но ваши проблемы частично затуманены попыткой объединить все в один вызов qplot.

Ваша x переменная Length является фактором, поэтому ggplot разумно считает Length 1 и Length 2 независимыми и не будет соединять линии.

Во-вторых, вы не сможете использовать stat_summary для суммирования ваших значений x, не заставляя их быть фактором (и, следовательно, независимым).

Мне проще предварительно обобщить данные, а не полагаться на ggplot.

eg

library(plyr)
data.means <- ddply(data, .(Group, Pos, Length), summarize, ReadT = mean(ReadT))

Затем постройте график, используя ggplot, а не qplot, чтобы обеспечить необходимую гибкость (и прозрачность).

Хитрость в том, чтобы соединить линии, состоит в том, чтобы рассмотреть x числовое значение в вызове geom_line, см. ">здесь например

ggplot(data.means, aes(x= Length, y= ReadT, colour = Pos)) + 
 geom_point() +
 geom_line(aes(x=as.numeric(Length))) +
 facet_grid(~Group)

Если вы настаивали на использовании необработанных данных и функций stat_xxxx, вы также могли бы воспроизвести это, используя stat_smooth для оценки средних значений (при этом x будет классифицироваться как числовое).

ggplot(data, aes(x = Length, y= ReadT, colour = Pos)) + 
 stat_summary(fun.y = 'mean', geom = 'point')+
 stat_smooth(method = 'lm', aes(x=as.numeric(Length)), se = FALSE) +
 facet_grid(~Group)
person mnel    schedule 26.02.2013
comment
Вы абсолютно правы, мне не удалось воспроизвести один раз, когда это сработало - это останется загадкой. Я отредактировал эту часть из заголовка и вопроса. Спасибо за очень полезные комментарии! Я также видел другой пост, посвященный той же проблеме (которую я пропустил ранее), которая указывает на другой пакет, который может быть здесь полезен — см.: ggplot2: линия, соединяющая средства сгруппированных данных. - person user2112401; 27.02.2013
comment
В первом коде ggplot должно быть 3 круглых скобки после ..numeric(Length - person user2112401; 27.02.2013