Carlota Oliveira
Carlota Oliveira

Reputation: 81

Ggplot stacked area

I already constructed some charts in execel. The problem is that the quality of the images in excel is not the best. In this way, I am trying to design the same plots in R. I am trying to plot this in R

enter image description here

I have already done this

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

plot(c)

However, the outcome was this,

enter image description here

Can you help solve this problem?

My data is 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")

Upvotes: 4

Views: 29

Answers (1)

David Robinson
David Robinson

Reputation: 78590

geom_area expects one row for each combination of x (year) and y (crisis) while you have many; you can use dplyr's count() to get that.

You'll also need to fill in missing values (year-crisis combination) with 0 or else it will skip that year for that crisis and leave a gap; you can use tidyr's complete() to get that.

In combination:

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

Upvotes: 4

Related Questions