R:在 ggplot2 中创建时间序列的堆积面积图

R: Create a stacked area plot of time series in ggplot2

我有一个数据框,它是每个变量的百分比分配。有四个变量,其中行的总和等于 1。这是数据框的示例输出:

dates       A   B   C   D
1997-01-01  0.2 0.2 0.5 0.1 
1997-02-01  0.3 0.2 0.4 0.1
1997-03-01  0.1 0.3 0.2 0.4
...         ... ... ... ...
2017-12-01  0.2 0.2 0.1 0.5

如何创建类似的堆积面积图,例如 x 轴显示年份,y 轴从 0 到 1(来自 https://ggplot2.tidyverse.org/reference/geom_density.html):

我按照说明进行的尝试产生了这个结果,这并不是我要找的:

我收到错误消息:

Error: A:D must evaluate to column positions or names, not a double vector

In addition: Warning messages:

1: In x:y : numerical expression has 252 elements: only the first used

2: In x:y : numerical expression has 252 elements: only the first used

我猜你想要面积,而不是密度。您还想将数据重塑为长格式。

library(tidyverse)

df <- read.table(text = "
dates       A   B   C   D
1997-01-01  0.2 0.2 0.5 0.1 
1997-02-01  0.3 0.2 0.4 0.1
1997-03-01  0.1 0.3 0.2 0.4
", header = TRUE)

df %>% 
  mutate(dates = as.Date(dates)) %>% 
  gather(variable, value, A:D) %>% 
  ggplot(aes(x = dates, y = value, fill = variable)) +
  geom_area()