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
答案 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"))