Изменить код фасета ggplot2 с гистограммы на QQplot

#r #ggplot2 #facet

#r #ggplot2 #фасет

Вопрос:

Я создаю большой набор графиков, чтобы посмотреть на распределение некоторых данных. Для этой цели я хотел создать два вида графиков:

  1. Гистограмма
  2. QQ-график

Я нашел этот отличный фрагмент кода в Интернете, который уже фасетирует гистограмму и, используя некоторые tidyr purrr функции и, дает мне именно то, что мне нужно. Но когда я пытаюсь изменить его для графика QQ, я не знаю, что именно нужно сделать, чтобы заставить его работать…

Вот код:

 data.for.normality %>%
  keep(is.numeric) %>% 
  gather() %>% 
  ggplot(aes(value))  
  facet_wrap(~ key, scales = "free", ncol = 3)  
  geom_histogram()
  

И вот результат:

Вывод гистограммы

Теперь я хочу изменить его для qqplots, подобных этому:

один QQplot

Таким образом, в идеальном мире я получу тот же фасетный вывод с именами переменных и всем остальным, но вместо гистограмм -> qqplots

Идеи?

Вот пример данных в dput :

 > dput(data[1:20,25:33])
structure(list(Medical.File...NEW..Secs. = c(16L, 25L, 23L, 13L, 
50L, 44L, 20L, 62L, 12L, 52L, 11L, 25L, 23L, 36L, 21L, 30L, 29L, 
31L, 44L, 37L), Mirshm..Secs. = c(65L, 277L, 63L, 76L, 49L, 52L, 
65L, 86L, 91L, 57L, 127L, 277L, 44L, 110L, 78L, 62L, 79L, 62L, 
110L, 74L), Mirshm..NEW..Secs. = c(59L, 91L, 33L, 24L, 24L, 18L, 
30L, 53L, 48L, 20L, 28L, 130L, 47L, 49L, 62L, 32L, 18L, 62L, 
22L, 59L), Payments..Secs. = c(76L, 69L, 138L, 87L, 99L, 60L, 
108L, 148L, 79L, 148L, 96L, 61L, 102L, 72L, 147L, 75L, 60L, 87L, 
72L, 65L), Payments..NEW..Secs. = c(39L, 36L, 48L, 58L, 62L, 
103L, 108L, 51L, 30L, 76L, 48L, 50L, 42L, 39L, 54L, 28L, 25L, 
52L, 34L, 62L), Update.A..Secs. = c(239L, 129L, 99L, 128L, 88L, 
79L, 98L, 127L, 138L, 229L, 249L, 99L, 128L, 66L, 70L, 79L, 98L, 
290L, 159L, 299L), Update.A..NEW..Secs. = c(62L, 91L, 52L, 76L, 
57L, 57L, 63L, 74L, 80L, 94L, 129L, 54L, 53L, 48L, 47L, 41L, 
45L, 128L, 160L, 128L), SUM.OLD..Secs. = c(583L, 791L, 590L, 
585L, 523L, 480L, 525L, 611L, 598L, 921L, 745L, 695L, 548L, 537L, 
663L, 632L, 982L, 912L, 656L, 738L), SUM.NEW..Secs. = c(285L, 
367L, 326L, 281L, 340L, 333L, 390L, 371L, 313L, 465L, 362L, 351L, 
338L, 404L, 363L, 368L, 362L, 492L, 446L, 424L)), row.names = c(NA, 
20L), class = "data.frame")
  

и здесь в виде обычного текста:

 data[1:20,25:33]
   Medical.File...NEW..Secs. Mirshm..Secs. Mirshm..NEW..Secs. Payments..Secs. Payments..NEW..Secs. Update.A..Secs. Update.A..NEW..Secs.
1                         16            65                 59              76                   39             239                   62
2                         25           277                 91              69                   36             129                   91
3                         23            63                 33             138                   48              99                   52
4                         13            76                 24              87                   58             128                   76
5                         50            49                 24              99                   62              88                   57
6                         44            52                 18              60                  103              79                   57
7                         20            65                 30             108                  108              98                   63
8                         62            86                 53             148                   51             127                   74
9                         12            91                 48              79                   30             138                   80
10                        52            57                 20             148                   76             229                   94
11                        11           127                 28              96                   48             249                  129
12                        25           277                130              61                   50              99                   54
13                        23            44                 47             102                   42             128                   53
14                        36           110                 49              72                   39              66                   48
15                        21            78                 62             147                   54              70                   47
16                        30            62                 32              75                   28              79                   41
17                        29            79                 18              60                   25              98                   45
18                        31            62                 62              87                   52             290                  128
19                        44           110                 22              72                   34             159                  160
20                        37            74                 59              65                   62             299                  128
   SUM.OLD..Secs. SUM.NEW..Secs.
1             583            285
2             791            367
3             590            326
4             585            281
5             523            340
6             480            333
7             525            390
8             611            371
9             598            313
10            921            465
11            745            362
12            695            351
13            548            338
14            537            404
15            663            363
16            632            368
17            982            362
18            912            492
19            656            446
20            738            424
  

Комментарии:

1. в чем дело ggplot2::geom_qq() ?

2. выдает ошибку:

3. Ошибка: Эстетика должна быть допустимыми столбцами данных. Проблемная эстетика (ы): x = образец.

Ответ №1:

Попробуйте это:

 data.for.normality %>%
  keep(is.numeric) %>% 
  gather() %>% 
  # you have to specify the sample you want to use
  ggplot(aes(sample = value))   
  facet_wrap(~ key, scales = "free", ncol = 3)  
  stat_qq()   
  stat_qq_line()
  

Вывод

ggplot

Комментарии:

1. Отлично, спасибо! Я думаю, проблема заключалась в том, чтобы изменить aes (значение) на aes (образец = значение)