#r #ggplot2 #facet
#r #ggplot2 #фасет
Вопрос:
Я создаю большой набор графиков, чтобы посмотреть на распределение некоторых данных. Для этой цели я хотел создать два вида графиков:
- Гистограмма
- QQ-график
Я нашел этот отличный фрагмент кода в Интернете, который уже фасетирует гистограмму и, используя некоторые tidyr
purrr
функции и, дает мне именно то, что мне нужно. Но когда я пытаюсь изменить его для графика QQ, я не знаю, что именно нужно сделать, чтобы заставить его работать…
Вот код:
data.for.normality %>%
keep(is.numeric) %>%
gather() %>%
ggplot(aes(value))
facet_wrap(~ key, scales = "free", ncol = 3)
geom_histogram()
И вот результат:
Теперь я хочу изменить его для qqplots, подобных этому:
Таким образом, в идеальном мире я получу тот же фасетный вывод с именами переменных и всем остальным, но вместо гистограмм -> 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()
Вывод
Комментарии:
1. Отлично, спасибо! Я думаю, проблема заключалась в том, чтобы изменить aes (значение) на aes (образец = значение)