使用ggplot2在X轴上获取日期字段时遇到问题

时间:2013-10-25 14:46:41

标签: r ggplot2

head(bktst.plotdata)   
   date      method  product type  actuals  forecast   residual   Percent_error month
1 2012-12-31  bauwd   CUSTM  NET  194727.51  -8192.00 -202919.51       -104.21 Dec12
2 2013-01-31  bauwd   CUSTM  NET  470416.27   1272.01 -469144.26        -99.73 Jan13
3 2013-02-28  bauwd   CUSTM  NET  190943.57  -1892.45 -192836.02       -100.99 Feb13
4 2013-03-31  bauwd   CUSTM  NET  -42908.91   2560.05   45468.96       -105.97 Mar13
5 2013-04-30  bauwd   CUSTM  NET -102401.68 358807.48  461209.16       -450.39 Apr13
6 2013-05-31  bauwd   CUSTM  NET -134869.73 337325.33  472195.06       -350.11 May13

我一直试图使用ggplot2绘制我的背部测试结果。给出上面的样本数据集。我的日期从2012年12月到2013年7月。 “方法”中有3个级别,“产品”中有5个级别,“类型”中有2个级别 我试过这个代码,麻烦的是R不是正确读取x轴,在X轴上我得到'Jan,feb,mar,apr,may,jun,jul,aug',而不是我期望R来绘制Dec到七月

month.plot1 <- ggplot(data=bktst.plotdata, aes(x= date, y=Percent_error, colour=method))
facet4 <- facet_grid(product~type,scales="free_y")
title3 <- ggtitle("Percent Error - Month-over-Month")
xaxis2 <- xlab("Date")
yaxis3 <- ylab("Error (%)")
month.plot1+geom_line(stat="identity", size=1, position="identity")+facet4+title3+xaxis2+yaxis3

# Tried changing the code to this still not getting the X-axis right
month.plot1 <- ggplot(data=bktst.plotdata, aes(x= format(date,'%b%y'), y=Percent_error, colour=method))
month.plot1+geom_line(stat="identity", size=1, position="identity")+facet4+title3+xaxis2+yaxis3

1 个答案:

答案 0 :(得分:1)

好吧,看起来你正在绘制每个月的最后一天,所以对我来说实际上有意义的是12月31日非常接近1月。如果查看绘制的点(使用geom_point),您可以看到每个点都位于最近月轴的左侧。

听起来你想要绘制年数和月数而不是实际日期。您可以通过多种方式执行此操作,但有一点可以将日期的部分更改为本月的第一天而不是本月的最后一天。在这里,我将展示如何使用包lubridate中的一些函数以及paste来实现此目的(我假设您的变量date已经是Date个对象)。

require(lubridate)
bktst.plotdata$date2 = as.Date(with(bktst.plotdata, 
                                    paste(year(date), month(date), "01", sep = "-")))

然后情节轴从12月开始。如果加载scales包,则可以更改x轴的格式。

require(scales)
ggplot(data=bktst.plotdata, aes(x = date2, y=Percent_error, colour=method)) +
    facet_grid(product~type,scales="free_y") +
    ggtitle("Percent Error - Month-over-Month") +
    xlab("Date") + ylab("Error (%)") +
    geom_line() +
    scale_x_date(labels=date_format(format = "%m-%Y"))