我需要在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")
这最终给了我这张图:
感谢你们两位!
答案 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()