在r中用ggplot2创建月份大小的箱子

时间:2014-04-09 02:47:03

标签: r date plot ggplot2 data.table

我需要在ggplot2中绘制一组数据。这是订购时间。这是数据集:

testset <- data.table(Date=as.Date(c("2013-07-02","2013-08-03","2013-09-04","2013-10-05","2013-11-06","2013-07-03","2013-08-04","2013-09-05","2013-10-06","2013-11-07")), Action = c("A","B","C","D","E","B","A","B","C","A","B","E","E","C","A"), rating = runif(30))

我正在做的是绘制它并使用scale_x_date将有条件的数据放在图表上。但是,当我这样做时,它并没有把它装入月份大小的箱子里。相反,它会在采取行动的那天将其加入。

ggplot(testset, aes(Date, fill=Action)) + geom_bar(position="dodge") + scale_x_date(labels = date_format("%b %Y"), breaks = date_breaks(width = "months"))

我想做的是将每个月的所有日期放入一个垃圾箱然后绘制图表。我在通过StackOverflow时找不到任何解决方案,在浏览ggplot2或scale_x_date的文献时没有任何问题。如果他们可以提供我正在寻找的输出,我不反对使用lubridate或zoo。

提前致谢!

编辑:从@mnel看到以下答案后,我最终发布了a question about how to modify plots。在@tonytonov给我的帮助和@mnel给我的帮助之间,我想出了一个解决方案。

ggplot(testset, aes(as.factor(as.yearmon(Date)), fill=Action)) + 
geom_bar(position='dodge') + xlab("Date") + ylab("Count")

这最终给了我这张图:

final graph

感谢你们两位!

1 个答案:

答案 0 :(得分:9)

您可以使用yearmon包中的zoo类。 scale_..._yearmon包中有一个zoo函数与scale_x_date包中的scales函数的工作方式类似

library(zoo)
ggplot(testset, aes(as.yearmon(Date), fill=Action)) + 
  geom_bar(position = position_dodge(width  = 1/12), 
           binwidth=1/12, colour='black') + 
  scale_x_yearmon()

enter image description here