带有 R 的 ggplot 中计数的累积堆积面积图
Cumulative stacked area plot for counts in ggplot with R
我有过去几十年采用的政策时间序列,我想用累积政策 counts, 制作堆积面积图,因为它们在之后仍然有效采用。我希望它们按组织分组,x 为时间,y 为累积计数,以显示政策采用随时间的增长。
数据:
df<- data.frame(
organization = c("a", "a", "c", "c", "a", "b"),
year = c(1990, 1991, 1992, 1993, 1994, 1995),
count= c(1,1,1,0,1,1))
我试过以下方法:
df%>%
group_by(organization, year) %>%
summarise(total = sum(count)) %>%
ggplot( aes(x=year, y= cumsum( total),fill=factor(organization))) +
geom_area(position = "stack")
现在我得到这样一个不累积的情节 -- 我认为这是因为多年来没有采取任何政策。
我有兴趣得到这样的东西:
图片来源:https://www.r-graph-gallery.com/136-stacked-area-chart.html
非常感谢任何帮助!!!
每个组织每年都需要代表,即使该组织有 0 个。然后将 mutate 添加到您的代码中并绘制累计总数。
为每个组织重新制作数据示例,使其每年都有一个数字,有些是 0
df = data.frame(time = rep(c(1990,1991,1992),3),
org = c("a","a","a","b","b","b","c","c","c"),
num = c(1,0,1,0,0,1,1,1,1))
df%>%
group_by(org, time) %>%
summarise(total = sum(num)) %>%
mutate(newtot = cumsum(total))%>%
ggplot(aes(x= time, y= newtot,fill=org)) +
geom_area()
对于每个组织,您需要确保至少有一个最小和最大年份的计数值。这样 ggplot2
将填补空白。此外,您需要小心计算总和。因此,如果最早和去年的值不存在,我在下面显示的解决方案会添加一个零计数。
我添加了一些代码,以便您可以自动为没有第一和最后 年数据的组织添加行。
要合并此自动代码,您需要合并 tail_dat
complete_dat
数据框并更改 [=16] 中的变量 dat
=] 定义以适合您自己的数据。
library(ggplot2)
library(dplyr)
library(tidyr)
# Create sample data
dat <- tribble(
~organization, ~year, ~count,
"a", 1990, 1,
"a", 1991, 1,
"b", 1991, 1,
"c", 1992, 1,
"c", 1993, 0,
"a", 1994, 1,
"b", 1995, 1
)
dat
#> # A tibble: 7 x 3
#> organization year count
#> <chr> <dbl> <dbl>
#> 1 a 1990 1
#> 2 a 1991 1
#> 3 b 1991 1
#> 4 c 1992 1
#> 5 c 1993 0
#> 6 a 1994 1
#> 7 b 1995 1
# NOTE incorrect results for comparison
dat %>%
group_by(organization, year) %>%
summarise(total = sum(count)) %>%
ggplot(aes(x = year, y = cumsum(total), fill = organization)) +
geom_area()
#> `summarise()` regrouping output by 'organization' (override with `.groups` argument)
# Fill out all years and organization combinations
complete_dat <- tidyr::expand(dat, organization, year = 1990:1995)
complete_dat
#> # A tibble: 18 x 2
#> organization year
#> <chr> <int>
#> 1 a 1990
#> 2 a 1991
#> 3 a 1992
#> 4 a 1993
#> 5 a 1994
#> 6 a 1995
#> 7 b 1990
#> 8 b 1991
#> 9 b 1992
#> 10 b 1993
#> 11 b 1994
#> 12 b 1995
#> 13 c 1990
#> 14 c 1991
#> 15 c 1992
#> 16 c 1993
#> 17 c 1994
#> 18 c 1995
# Update data so that counting works and fills in gaps
final_dat <- complete_dat %>%
left_join(dat, by = c("organization", "year")) %>%
replace_na(list(count = 0)) %>% # Replace NA with zeros
group_by(organization, year) %>%
arrange(organization, year) %>% # Arrange by year so adding works
group_by(organization) %>%
mutate(aggcount = cumsum(count))
final_dat
#> # A tibble: 18 x 4
#> # Groups: organization [3]
#> organization year count aggcount
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1990 1 1
#> 2 a 1991 1 2
#> 3 a 1992 0 2
#> 4 a 1993 0 2
#> 5 a 1994 1 3
#> 6 a 1995 0 3
#> 7 b 1990 0 0
#> 8 b 1991 1 1
#> 9 b 1992 0 1
#> 10 b 1993 0 1
#> 11 b 1994 0 1
#> 12 b 1995 1 2
#> 13 c 1990 0 0
#> 14 c 1991 0 0
#> 15 c 1992 1 1
#> 16 c 1993 0 1
#> 17 c 1994 0 1
#> 18 c 1995 0 1
# Plot results
final_dat %>%
ggplot(aes(x = year, y = aggcount, fill = organization)) +
geom_area()
由 reprex package (v0.3.0)
于 2020 年 12 月 10 日创建
我有过去几十年采用的政策时间序列,我想用累积政策 counts, 制作堆积面积图,因为它们在之后仍然有效采用。我希望它们按组织分组,x 为时间,y 为累积计数,以显示政策采用随时间的增长。
数据:
df<- data.frame(
organization = c("a", "a", "c", "c", "a", "b"),
year = c(1990, 1991, 1992, 1993, 1994, 1995),
count= c(1,1,1,0,1,1))
我试过以下方法:
df%>%
group_by(organization, year) %>%
summarise(total = sum(count)) %>%
ggplot( aes(x=year, y= cumsum( total),fill=factor(organization))) +
geom_area(position = "stack")
现在我得到这样一个不累积的情节 -- 我认为这是因为多年来没有采取任何政策。
我有兴趣得到这样的东西:
图片来源:https://www.r-graph-gallery.com/136-stacked-area-chart.html
非常感谢任何帮助!!!
每个组织每年都需要代表,即使该组织有 0 个。然后将 mutate 添加到您的代码中并绘制累计总数。
为每个组织重新制作数据示例,使其每年都有一个数字,有些是 0
df = data.frame(time = rep(c(1990,1991,1992),3),
org = c("a","a","a","b","b","b","c","c","c"),
num = c(1,0,1,0,0,1,1,1,1))
df%>%
group_by(org, time) %>%
summarise(total = sum(num)) %>%
mutate(newtot = cumsum(total))%>%
ggplot(aes(x= time, y= newtot,fill=org)) +
geom_area()
对于每个组织,您需要确保至少有一个最小和最大年份的计数值。这样 ggplot2
将填补空白。此外,您需要小心计算总和。因此,如果最早和去年的值不存在,我在下面显示的解决方案会添加一个零计数。
我添加了一些代码,以便您可以自动为没有第一和最后 年数据的组织添加行。
要合并此自动代码,您需要合并 tail_dat
complete_dat
数据框并更改 [=16] 中的变量 dat
=] 定义以适合您自己的数据。
library(ggplot2)
library(dplyr)
library(tidyr)
# Create sample data
dat <- tribble(
~organization, ~year, ~count,
"a", 1990, 1,
"a", 1991, 1,
"b", 1991, 1,
"c", 1992, 1,
"c", 1993, 0,
"a", 1994, 1,
"b", 1995, 1
)
dat
#> # A tibble: 7 x 3
#> organization year count
#> <chr> <dbl> <dbl>
#> 1 a 1990 1
#> 2 a 1991 1
#> 3 b 1991 1
#> 4 c 1992 1
#> 5 c 1993 0
#> 6 a 1994 1
#> 7 b 1995 1
# NOTE incorrect results for comparison
dat %>%
group_by(organization, year) %>%
summarise(total = sum(count)) %>%
ggplot(aes(x = year, y = cumsum(total), fill = organization)) +
geom_area()
#> `summarise()` regrouping output by 'organization' (override with `.groups` argument)
# Fill out all years and organization combinations
complete_dat <- tidyr::expand(dat, organization, year = 1990:1995)
complete_dat
#> # A tibble: 18 x 2
#> organization year
#> <chr> <int>
#> 1 a 1990
#> 2 a 1991
#> 3 a 1992
#> 4 a 1993
#> 5 a 1994
#> 6 a 1995
#> 7 b 1990
#> 8 b 1991
#> 9 b 1992
#> 10 b 1993
#> 11 b 1994
#> 12 b 1995
#> 13 c 1990
#> 14 c 1991
#> 15 c 1992
#> 16 c 1993
#> 17 c 1994
#> 18 c 1995
# Update data so that counting works and fills in gaps
final_dat <- complete_dat %>%
left_join(dat, by = c("organization", "year")) %>%
replace_na(list(count = 0)) %>% # Replace NA with zeros
group_by(organization, year) %>%
arrange(organization, year) %>% # Arrange by year so adding works
group_by(organization) %>%
mutate(aggcount = cumsum(count))
final_dat
#> # A tibble: 18 x 4
#> # Groups: organization [3]
#> organization year count aggcount
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1990 1 1
#> 2 a 1991 1 2
#> 3 a 1992 0 2
#> 4 a 1993 0 2
#> 5 a 1994 1 3
#> 6 a 1995 0 3
#> 7 b 1990 0 0
#> 8 b 1991 1 1
#> 9 b 1992 0 1
#> 10 b 1993 0 1
#> 11 b 1994 0 1
#> 12 b 1995 1 2
#> 13 c 1990 0 0
#> 14 c 1991 0 0
#> 15 c 1992 1 1
#> 16 c 1993 0 1
#> 17 c 1994 0 1
#> 18 c 1995 0 1
# Plot results
final_dat %>%
ggplot(aes(x = year, y = aggcount, fill = organization)) +
geom_area()
由 reprex package (v0.3.0)
于 2020 年 12 月 10 日创建