0
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 轴上我得到“一月,二月,三月,四月,五月,六月,七月,八月',而不是我希望 R 绘制十二月到七月

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
4

1 回答 1

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"))
于 2013-10-25T16:42:53.847 回答