2015-12-03 4 views
2

У меня есть данные, в которых зарегистрированы два типа вхождений: type_a и type_b и год их возникновения.Создание штабелированного кумулятивного плавного распределения частот

Это один из способов, чтобы сформировать пример моих данных:

set.seed(1) 
years <- 1991:2010 
type_a_years <- 20 
type_b_years <- 10 
type_a <- round(runif(type_a_years, 0, 5)) 
type_b <- c(rep(0, type_a_years-type_b_years),round(runif(type_b_years, 5, 7))) 

df <- data.frame(year = unlist(sapply(1:length(years), function(x) c(rep(years[x], type_a[x]),rep(years[x], type_b[x])))), 
       type = unlist(sapply(1:length(years), function(x) c(rep("type_a", type_a[x]),rep("type_b", type_b[x]))))) 

head(df) 
    year type 
1 1991 type_a 
2 1992 type_a 
3 1992 type_a 
4 1993 type_a 
5 1993 type_a 
6 1993 type_a 

я хотел бы, чтобы сгенерировать кумулятивное распределение частот участка type_b событий накладываются на type_a событий в году, и я хотел бы распределения должны отображаться как кривые, а не столбцы.

Я предполагаю, что это должно быть некоторые манипуляции:

library(ggplot2) 
ggplot(df, aes(year)) + stat_ecdf() 

Где я буду получать две кривые и уложены по типу, где площадь под каждый тип будет заполнен другим цветом. То есть область между кривой type_a и осью x будет иметь один цвет, а область между кривой type_b и кривой type_a будет в другом цвете.

ответ

3

Вы можете сделать это, используя некоторую агрегирование в dplyr и tidyr, а затем используя geom_area.

library(tidyr) 
library(dplyr) 
df1 <- df %>% group_by(type, year) %>% 
       summarise(total = n()) %>% 
       mutate(total = cumsum(total)) %>% 
       ungroup %>% 
       complete(type, year, fill = list(total = 0)) 

Теперь сюжет:

library(ggplot2) 
ggplot(df1, aes(x = year, y = total, fill = type)) + geom_area() 

enter image description here

+0

Благодаря jeremycg. Я получаю эту ошибку: Ошибка в завершении ('df%>% group_by (тип, год)%>% суммировать (total = n())%>% mutate (total = cumsum (total))%>% ungroup ',: неиспользуемый аргумент (fill = list (total = 0)) – dan

+0

у вас может быть устаревшая версия' tidyr', полная добавленная только в v0.30. Попробуйте переустановить ее. – jeremycg

Смежные вопросы