如何使用多个向量堆叠面积图?

时间:2017-05-15 03:01:06

标签: r ggplot2

我以宽格式从模型中获取数据,在一段时间内每周获取一行,为每个输出获取一列。示例下面的制作数据。

month <- as.Date(c('2010-10-1','2010-11-1','2010-12-1'))
John_Doe <- c(21000, 23400, 26800)
Peter_Gynn <- c(14500, 14800, 35300)
Jolie_Hope <- c(49200, 28600, 26800)
employ.data1 <- data.frame(month, John_Doe, Peter_Gynn, Jolie_Hope)

尝试对每个向量进行叠加绘图但不起作用,它们只是相互重叠。

ggplot(employ.data1) + geom_area(aes(x=month, y=John_Doe), position='stack') + geom_area(aes(x=month, y=Peter_Gynn), position='stack') + geom_area(aes(x=month, y=Jolie_Hope), position='stack')

据我所知,如果我的数据格式很长,我可以很容易地做到这一点。见下文,但这不是我的数据。考虑一个简单的解决方案来解决上述问题,或者将数据传输到下面的格式。

employee <- c('John Doe','John Doe','John Doe','Peter Gynn','Peter Gynn','Peter Gynn','Jolie Hope','Jolie Hope','Jolie Hope')
month <- as.Date(c('2010-10-1','2010-11-1','2010-12-1','2010-10-1','2010-11-1','2010-12-1','2010-10-1','2010-11-1','2010-12-1'))
expense <- c(21000, 23400, 26800, 14500, 14800, 35300, 49200, 28600, 26800)
employ.data2 <- data.frame(employee, month, expense)

ggplot(employ.data2) + geom_area(aes(x=month, y=expense, fill=employee), position='stack')

在示例中,我显示了三列,实际上可能有任何数字出现在模型中,因此计划使用“for in”循环来使用每个附加向量更新图表。

另外感谢您的回复:

它按字母顺序排列区域,我无法弄清楚如何按照我想要的顺序对它们进行排序,其中Peter位于中间。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用tidyr

将数据收集成长格式
library("tidyr")
employ_tidy <- gather(employ.data1, employee, expense, -month)
employ_tidy
##        month   employee expense
## 1 2010-10-01   John_Doe   21000
## 2 2010-11-01   John_Doe   23400
## 3 2010-12-01   John_Doe   26800
## 4 2010-10-01 Peter_Gynn   14500
## 5 2010-11-01 Peter_Gynn   14800
## 6 2010-12-01 Peter_Gynn   35300
## 7 2010-10-01 Jolie_Hope   49200
## 8 2010-11-01 Jolie_Hope   28600
## 9 2010-12-01 Jolie_Hope   26800