Ggplot堆叠面积图

4

我已经在 Excel 中制作了一些图表,但是图片质量不太好。因此,我正在尝试在 R 中设计相同的图表。

我正试图在 R 中绘制这个图表:

enter image description here

我已经完成了这个任务。

c <- ggplot(crises_df, aes(x = as.numeric(Year), y = Number, fill = Crises)) +
  geom_area()

plot(c)


然而,结果是这样的: enter image description here 您能帮助解决这个问题吗?
我的数据在这里。
structure(list(Year = c("1980", "1980", "1980", "1980", "1980", 
"1981", "1981", "1981", "1981", "1981", "1981", "1981", "1981", 
"1981", "1981", "1981", "1981", "1982", "1982", "1982", "1982", 
"1982", "1982", "1982", "1982", "1983", "1983", "1983", "1983", 
"1983", "1983", "1983", "1983", "1983", "1983", "1983", "1983", 
"1983", "1983", "1984", "1984", "1984", "1984", "1984", "1985", 
"1985", "1985", "1985", "1985", "1985", "1986", "1986", "1987", 
"1987", "1987", "1987", "1987", "1987", "1987", "1988", "1988", 
"1988", "1988", "1988", "1988", "1988", "1988", "1988", "1989", 
"1989", "1989", "1989", "1989", "1989", "1990", "1990", "1990", 
"1990", "1990", "1990", "1990", "1990", "1991", "1991", "1991", 
"1991", "1991", "1992", "1992", "1992", "1992", "1992", "1992", 
"1992", "1992", "1993", "1993", "1993", "1993", "1993", "1993", 
"1993", "1994", "1994", "1994", "1994", "1994", "1994", "1994", 
"1994", "1994", "1994", "1994", "1994", "1994", "1995", "1995", 
"1995", "1995", "1995", "1995", "1995", "1996", "1996", "1996", 
"1996", "1997", "1997", "1997", "1997", "1997", "1997", "1997", 
"1997", "1997", "1997", "1997", "1998", "1998", "1998", "1998", 
"1998", "1998", "1998", "1998", "1998", "1998", "1998", "1998", 
"1998", "1998", "1998", "1999", "1999", "1999", "2000", "2001", 
"2001", "2002", "2002", "2002", "2002", "2002", "2004", "2005", 
"2007", "2007", "2008", "2008", "2008", "2008", "2008", "2008", 
"2008", "2008", "2008", "2008", "2008", "2008", "2008", "2008", 
"2008", "2008", "2008", "2008", "2009", "2009", "2012", "2012", 
"2013", "2014", "2014", "2014", "2014", "2014", "2015", "2015", 
"2015", "2015", "2015", "2016"), Crises = c("Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Sovereign Debt Crisis", "Sovereign Debt Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Banking Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Sovereign Debt Crisis", "Sovereign Debt Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Sovereign Debt Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Sovereign Debt Crisis", "Sovereign Debt Crisis", 
"Banking Crisis", "Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Banking Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Currency Crisis", 
"Sovereign Debt Crisis", "Sovereign Debt Crisis", "Banking Crisis", 
"Banking Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Sovereign Debt Crisis", "Sovereign Debt Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Currency Crisis", "Currency Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Sovereign Debt Crisis", "Currency Crisis", 
"Currency Crisis", "Sovereign Debt Crisis", "Currency Crisis", 
"Banking Crisis", "Sovereign Debt Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Sovereign Debt Crisis", "Currency Crisis", "Currency Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Banking Crisis", "Banking Crisis", "Banking Crisis", "Banking Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Currency Crisis", "Banking Crisis", "Banking Crisis", "Currency Crisis", 
"Currency Crisis", "Sovereign Debt Crisis", "Currency Crisis", 
"Currency Crisis", "Currency Crisis", "Currency Crisis", "Sovereign Debt Crisis", 
"Currency Crisis"), Number = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1)), row.names = c(NA, -201L), class = "data.frame")
1个回答

4

geom_area期望每个x(年份)和y(危机)的组合中都有一行,而你有多个; 你可以使用dplyr的count()来获得这一点。

您还需要使用0填充缺失值(year-crisis组合),否则它将跳过该危机的那一年并留下间隙; 您可以使用tidyr的complete()来获得此结果。

结合使用:

library(dplyr)
library(tidyr)

crises_df %>%
  count(Year, Crises, wt = Number) %>%
  complete(Year, Crises, fill = list(n = 0)) %>%
  ggplot(aes(as.numeric(Year), n, fill = Crises)) +
  geom_area()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接