ggplot2重叠时间序列

时间:2013-02-27 21:53:43

标签: r ggplot2 time-series

我试图在我工作的河上绘制估计的和实际的深度值。似乎估计和实际重叠的时间段,估计输出不正确,即使我估计值到2012年9月(图表上的结束时间)

library(ggplot2)
library(scales)
LowerHydro<-data.frame(LowerHydrology)
LowerHydro$date <- as.Date(LowerHydro$Date, format = "%m/%d/%y")
LowerHydro<-rename(LowerHydro,c(Clarks.Lower..m.="Depth"))
qplot(main="Lower Clarks Hydrograph",xlab="Date",ylab="Depth(m)",
      date,Depth,data=LowerHydro,group=Group,color=Group,geom="line") + 
   geom_line(lwd=0.70) + 
   scale_x_date(labels=date_format("%b-%y"),
                breaks="60 days",
                limits = as.Date(c("2010-10-01","2012-09-12")),
                expand=c(0.01,0)) + 
   theme_bw()+
   labs(colour="") + 
   scale_y_continuous(expand=c(0.03,0),
                      limits=c(4,20),
                      breaks=seq(4,20,by=2),
                      labels=seq(4,20,by=2)) + 
   theme(axis.title.x=element_text(face='bold',size=16,vjust=-2)) + 
   theme(axis.title.y=element_text(face='bold',size=16,angle = 90,vjust=-0.2,hjust=0.5)) + 
   theme(plot.title=element_text(face='bold',size=25,vjust=2)) + 
   theme(axis.text.x=element_text(size=12)) + 
   theme(axis.text.y=element_text(size=12)) + 
   theme(legend.title=element_text(size=16,hjust=-0.2)) + 
   theme(legend.text=element_text(size=16)) + 
   theme(legend.key.size=unit(c(1.15,1.15),"lines")) + 
   scale_color_manual(values=c("Estimated"="black", "Actual"="blue")) + 
   theme(plot.margin = unit(c(1,-5,2,2),"lines"))

str(LowerHydro)
data.frame':    1053 obs. of  4 variables:
$ Date : Factor w/ 1053 levels "01/01/11","01/01/12",..: 561 563 565 567 569 571 572   574 576 578 ...
$ Depth: num  5.24 5.14 5.42 5.27 5.27 ...
$ Group: Factor w/ 2 levels "Actual","Estimated": 2 2 2 2 2 2 2 2 2 2 ...
$ date : Date, format: "2010-10-01" "2010-10-02" ...

with(LowerHydro, LowerHydro[date %in% seq.Date(as.Date("2012-01-01"),   as.Date("2012-01-10"), by='1 day'),])
     Date Clarks.Lower..m.     Group
457  1/1/2012           11.242 Estimated
458  1/2/2012           11.054 Estimated
459  1/3/2012           11.054 Estimated
460  1/4/2012           10.992 Estimated
461  1/5/2012           10.773 Estimated
462  1/6/2012            9.959 Estimated
463  1/7/2012            8.739 Estimated
464  1/8/2012            7.676 Estimated
465  1/9/2012            7.019 Estimated
466 1/10/2012            6.581 Estimated

很抱歉qplot上的繁琐代码...它的所有美学......但似乎它不喜欢我在2011年10月之后的相同日期范围内的实际和估计值。我无法发布图像,但基本上我估计了整个日期范围的值,但是在它们与实际值一致之后,估计线只是在一个微小的角度上排成直线,直到时间范围结束。

以下是该图表的链接:

http://s1358.beta.photobucket.com/user/jaredmilitello/media/Rplot01_zps9b29f6d3.png.html

如果我编辑此代码以在2011-10-07的行为中创建第一个日期,而不是像原来的那样我得到一个错误...本质上这个代码是我没有随机深度的数据集。

> act <- data.frame(date=seq.Date(as.Date('2011-10-07'),
                             as.Date('2012-09-12'),
                             by='1 day'),
              Depth=rnorm(n=431, sd=100),
              Group="Actual")
Error in data.frame(date = seq.Date(as.Date("2011-10-07"), as.Date("2012-09-12"),  : 
arguments imply differing number of rows: 342, 431, 1
> est <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                           as.Date('2012-09-12'),
                           by='1 day'),
             Depth=rnorm(n=713, sd=100),
              Group="Estimate") 
> LowerHydro <- rbind(act, est)
> str(df)
function (x, df1, df2, ncp, log = FALSE)   
> qplot(date, Depth, data=LowerHydro, colour=Group, geom="line")

2 个答案:

答案 0 :(得分:4)

如果不了解您的数据,正如评论已经注明,我们无法帮助您。

您的数据一定有问题,因为绘制两条重叠时间段的行没有问题:

act <- data.frame(date=seq.Date(as.Date('2011-07-10'),
                                as.Date('2012-09-12'),
                                by='1 day'),
                  Depth=rnorm(n=431, sd=100),
                  Group="Actual")
est <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                                as.Date('2012-09-12'),
                                by='1 day'),
                  Depth=rnorm(n=713, sd=100),
                  Group="Estimate")

LowerHydro <- rbind(act, est)
str(df)

qplot(date, Depth, data=LowerHydro, colour=Group, geom="line")

enter image description here

如果您需要帮助,请将问题重现(请参阅评论中的链接),并提供有关数据的所有相关详细信息。

此外,不要为你的情节所做的所有调整而烦恼(要知道它们在ggplot2意义上不是美学),直到基本情节为止工作。至少不要在这里把所有不相关的东西都放在你的问题中。


修改

在查看您的实际数据后,问题会很快显现出来。如果你整理你的情节而不用担心它的外观,那么你应该避免将来遇到这样的问题。

当我运行原始qplot时会发生这种情况:

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")

enter image description here

很明显,估计组的日期已经填满了 - 在实际测量开始后,估计组将在未来十年内跳跃。

现在,关于发生为什么,您必须返回到将Date转换为date的时间。您使用format="%m/%d/%Y",这将是伟大的,除了不一致。对于大约2011-10-04之后的日期,格式从%m/%d/%y更改为%m/%d/%Y(即2011年1月10日至2011年1月10日)。

将来要避免这种情况:

  1. 检查您的数据,并查看格式是否一致。
  2. 执行此类转换后检查您的数据。
  3. 将您的情节排序之前开始担心它的外观
  4. 将最小的例子发布到stackoverflow,这样每个人都不会看错了东西,给你掉线,而且对帮助不感兴趣。

答案 1 :(得分:1)

这是我试过的。

我生成了一些样本数据来尝试你的情节:

library(package=ggplot2)
library(package=scales)

LowerHydro <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                                       as.Date('2012-09-12'),
                                       by='1 day'),
                         Depth=rnorm(n=713, sd=100),
                         Group=c(rep('Estimated', 363),
                                 rep('Actual', 350)))

绘制它(简化的情节,请注意)

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")+
    scale_x_date(labels=date_format("%b-%y"),breaks="60 days",
                 limits = as.Date(c("2010-10-01","2012-09-12")),
                 expand=c(0.01,0))+theme_bw()

一切似乎都符合预期。

现在,我在末尾添加了一个贴错标签的日期(最后一个日期有实际和估计数据的数据)

LowerHydro <- rbind(LowerHydro, data.frame(date=as.Date('2012-09-12'),
                             Depth=rnorm(n=1, sd=100),
                             Group='Estimated'))

然后情节破裂

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")+
    scale_x_date(labels=date_format("%b-%y"),breaks="60 days",
                 limits = as.Date(c("2010-10-01","2012-09-12")),
                 expand=c(0.01,0))+theme_bw()

您是否检查了每个估算数据和实际数据中的日期范围?