我以宽格式从模型中获取数据,在一段时间内每周获取一行,为每个输出获取一列。示例下面的制作数据。
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位于中间。
答案 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