#r #ggplot2 #histogram
Вопрос:
У меня есть агрегированные данные, каждая строка которых представляет нескольких человек, например
data <- tribble(
~x, ~count,
10, 2,
12, 5,
10, 1,
15, 12,
15.5, 2,
11, 7,
19, 1,
14, 1,
9, 1,
17, 1,
13, 4)
Можно ли создать гистограмму или график плотности, учитывающий количество исков
data %>% ggplot(aes(x = x, count = count)) geom_histogram(bins = 5)
(в этом случае счетчик игнорируется), или мне следует разгруппировать данные?
Ответ №1:
Я думаю geom_col
, что это лучше подходит для этого, чем geom_histogram
, хотя его можно использовать geom_histogram(stat = "identity")
(как в предыдущей версии этого ответа).
library(ggplot2)
library(dplyr, warn.conflicts = FALSE)
data <- tribble(
~x, ~count,
10, 2,
12, 5,
10, 1,
15, 12,
15.5, 2,
11, 7,
19, 1,
14, 1,
9, 1,
17, 1,
13, 4)
data %>% ggplot(aes(x = x, y = count)) geom_col()
Создано 2021-09-05 пакетом reprex (v2.0.1)
Комментарии:
1. это вообще не сработало для большого набора данных, но разгруппировка, похоже, является решением:
data %>% uncount(count) %>% ggplot(aes(x = x)) geom_histogram()
2. Что значит «совсем не сработало»? Ошибка или вывод не такой, как вы ожидали?
3. Извините, не было понятно. с набором данных 2k записей он не выдает никаких выходных данных (пустой график). Вот пример с 50 записями. Используя предложенный подход, он дает некоторый результат, но это не то, что мне хотелось бы.
data1 <-fread("https://www.dropbox.com/s/giwwep7ij6t4er2/testdata50.csv?dl=1")
подход 1:data1 %>% ggplot(aes(x = x, y = count)) geom_col()
подход 2:data1 %>% uncount(count) %>% ggplot(aes(x = x)) geom_histogram(bins=10)