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

3

我有一个数据框,其中每个变量的百分比分配。有四个变量,行总和等于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):

enter image description here

我尝试按照说明做出了这个结果,但并不完全符合我的要求:

enter image description here

我收到了错误信息:
错误:A:D必须评估为列位置或名称,而不是双精度向量。
此外,警告消息如下:
1:在x:y中:数字表达式有252个元素:仅使用第一个。
2:在x:y中:数字表达式有252个元素:仅使用第一个。

你使用了哪些代码来生成所示的图形? - Jack Brookes
我使用了 ggplot(df, aes(x = dates, y = values)) + geom_area(position = "fill") - Mataunited18
你的数据框中没有 values 列。 - Jack Brookes
我的数据框看起来像这样:df <- data.frame(dates = dates, value = cbind(A, B, C, D)) - Mataunited18
这不是你在帖子中所说的。请看下面我的回答。 - Jack Brookes
请参考此处的内容,详细了解如何创建易于解答的 R 问题。这包括您数据的代表性样本、您已编写的代码以及我们应该知道的任何错误消息,请在问题中发布 - camille
1个回答

4
我猜您想要的是区域,而不是密度。此外,您需要将数据重塑为长格式。
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()

enter image description here


1
当我尝试运行你的代码时,我只收到错误信息。我的“df”也是一个数据框,结构与你的相同。 - Mataunited18
在这种情况下,错误非常明显。你的数据框中不包含列 AD - Jack Brookes
这很奇怪。因为我有四列A、B、C和D。我也尝试通过colnames()来命名它们。dim在cols中也给出了5。 - Mataunited18
我已经解决了这个问题。但是,您知道如何为每个变量添加黑色边线吗?即边缘处的黑色线条? - Mataunited18
1
geom_area(color = "black") - Jack Brookes

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