Хобрук: Ваш путь к мастерству в программировании

ggplot2: ошибка репликации графика из 2 наборов данных

Я пытаюсь воспроизвести последний график из этого примера: https://www.r-bloggers.com/plotting-individual-observations-and-group-means-with-ggplot2/

У меня получается, когда я использую тот же код и данные из примера. Однако, если я попробую это самостоятельно, это не сработает.

Мои исходные данные - это длинный формат:

> head(summpas)
id session paradigm  N    mean        sd       se min firstq median  thirdq  max
1  1      s1 baseline 20  831.00  692.7155 154.8959  95 326.50  585.5 1327.50 2433
2  1      s1    post1 20 1344.65 1261.5589 282.0931 107 315.25 1008.5 2105.00 4621
3  1      s1    post2 20 1058.05  856.6661 191.5564 105 144.50 1064.0 1915.25 2427
4  1      s1    post3 20 1318.00 1016.1804 227.2248  95 381.75 1289.5 1741.50 3688
6  1      s2 baseline 20 1058.20 1118.8923 250.1919  10 131.00  314.5 1984.25 3042
7  1      s2    post1 20 1909.65 1478.1206 330.5178  59 760.50 1465.0 2808.00 4602

Обобщение, как указано в примере, у меня не работает:

> meansummpas <- summpas %>%
    group_by(session, paradigm) %>% 
    summarise(mean = mean(mean))
> meansummpas
mean
1 949.5366

Поэтому я использую:

library(plyr)
meansummpas <- ddply(summpas, c("session", "paradigm"), summarise, 
mean=mean(mean))

Теперь пробую сюжет:

library(ggplot2)
ggplot(summpas, aes(x=paradigm, y=mean, group=id, colour=session)) + geom_line(aes(group=session), alpha=.3) + geom_line(data=meansummpas, alpha=.8, size=3)

Но я получаю сообщение об ошибке:

Don't know how to automatically pick scale for object of type 
tbl_df/tbl/data.frame. Defaulting to continuous.
Error: Aesthetics must be either length 1 or the same as the data (8): x, y, 
group, colour

Что я заметил, так это то, что данные из примера и мои данные не совсем одного класса (это также относится к необобщенным данным):

class(gd)
[1] "grouped_df" "tbl_df"     "tbl"        "data.frame"
class(meansummpas)
[1] "data.frame"

Почему я получаю эту ошибку? Что я делаю не так? :) Большое спасибо!!

15.09.2017

  • dplyr возвращает не data.frames, а сгруппированные data.frames или таблицы, которые в конечном итоге можно интерпретировать как data.frame. Почему ваш подход с group_by %>% summarise не группируется, я не могу сказать. Пожалуйста, еще раз проверьте, не возникает ли ошибка или вы каким-то образом пропустили среднюю строку. 15.09.2017
  • Хорошо. Я попробую еще раз. но как вы думаете, это проблема, вызывающая ошибку, когда я вызываю свой сюжет? 15.09.2017
  • Может быть; также попробуйте удалить эстетику group из основного вызова ggplot. Вы устанавливаете его явно в первом geom_line. Вы не во втором, поэтому он возвращается к использованию id в качестве группирующей переменной, которая, похоже, не существует для data.frame meansummpas. 15.09.2017
  • Да, кажется, что-то да. Только теперь получаю ошибку geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?. Поэтому я попробовал ggplot(summpas, aes(x=paradigm, y=mean, colour=session)) + geom_line(aes(group=session), alpha=.3) + geom_line(data=meansummpas, group=1, alpha=.8, size=3) Но сюжет не имеет смысла, он немного похож на первый пример сюжета по ссылке в моем исходном посте прямо под заголовком Повторные наблюдения (много вертикальных линий). Так что с группировкой все равно что-то не так.... 15.09.2017

Ответы:


1

Непонятно, что вы замышляете, поскольку вы, кажется, уже резюмировали каждую парадигму/сессию.

Похоже, проблема с «одним наблюдением на группу» возникает из-за того, что ваша переменная x является категориальной; это, по-видимому, подразумевает группировку.

Но мне удалось получить график, который усредняется по всем параметрам, но мне пришлось добавить строки 8 и 9.

summpas <- read.table(text='id session paradigm  N    mean        sd       se min firstq median  thirdq  max
1  1      s1 baseline 20  831.00  692.7155 154.8959  95 326.50  585.5 1327.50 2433
2  1      s1    post1 20 1344.65 1261.5589 282.0931 107 315.25 1008.5 2105.00 4621
3  1      s1    post2 20 1058.05  856.6661 191.5564 105 144.50 1064.0 1915.25 2427
4  1      s1    post3 20 1318.00 1016.1804 227.2248  95 381.75 1289.5 1741.50 3688
6  1      s2 baseline 20 1058.20 1118.8923 250.1919  10 131.00  314.5 1984.25 3042
7  1      s2    post1 20 1909.65 1478.1206 330.5178  59 760.50 1465.0 2808.00 4602
8  1      s2    post2 20 1060.20 1118.8923 250.1919  10 131.00  314.5 1984.25 3042
9  1      s2    post3 20 1980.20 1118.8923 250.1919  10 131.00  314.5 1984.25 3042
', header=TRUE, as.is=TRUE)
ggplot(summpas, aes(x=paradigm, y=mean)) + geom_path(aes(colour=session, group=session)) +
  stat_summary(fun.y=mean, geom='line', aes(group=NA))
15.09.2017
  • Данные summpas содержат id поверх paradigm и session. meansummpas содержит только paradigm и session. Но это почти доводит меня до конца... Я изменил код на: ggplot(summpas, aes(x=paradigm, y=mean)) + geom_path(aes(colour=session, group=session)) + stat_summary(fun.y=mean, geom='line', aes(group=session)). Но теперь я хотел бы, чтобы резюмирующая линия была толще, чем остальные линии... 15.09.2017
  • В порядке. Я получил свой статистический график, используя ggplot(summpas, aes(x=paradigm, y=mean)) + geom_path(aes(colour=session, group=session), size=0.1) + stat_summary(fun.y=mean, geom='line', aes(group=session, colour=session), size=1.5). Большое спасибо!!!! 15.09.2017
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..