【问题标题】:ggplot2 overlapping time seriesggplot2重叠时间序列
【发布时间】:2013-02-27 21:53:43
【问题描述】:

我正在尝试绘制我工作过的河流的估计深度值和实际深度值。似乎估计和实际重叠的时间段,估计没有正确输出,即使我的估计值直到 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,而不是像最初那样设置为 2011-07-10,我会收到错误...基本上此代码是我的数据集,没有随机深度。

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

【问题讨论】:

  • 您能提供一些示例数据吗?看起来额外的geom_line(lwd=0.70) 可能会给您带来一些麻烦。为什么要使用它,因为您已经在 qplot(...) 调用中指定了 geom='line'?您可以改为在 qplot 内设置 size=0.70。试试看。
  • @Jared 查看下面的示例。我真的怀疑这是问题所在,但这是可能的。在您提供示例数据之前,我们一直在猜测。此外,似乎附加的deom_line(...) 不应该是一个问题,但你会在同一个地方绘制两次的每一行结束,一个在另一个上(我想甚至不明显)。
  • (-1),绝对不考虑让帖子成为一个更好的问题。
  • 我不太确定如何制作示例数据...我对 R 比较陌生...只是在我的论文中使用它进行一些绘图和分析...示例数据会有是两个组(估计和实际)的深度按日期相互重叠的地方。

标签: r ggplot2 time-series


【解决方案1】:

在不了解您的数据的情况下,正如 cmets 已经指出的那样,我们无法为您提供很好的帮助。

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

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

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

另外,在基本情节正常工作之前,不要费心对情节进行的所有调整(注意它们不是ggplot2 意义上的美学)。至少不要把所有不相关的东西都放在你的问题中。


编辑

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

这就是我运行原始qplot 时发生的情况:

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

很明显,估计组的日期被填满了 - 在实际测量开始后,估计组跳到未来大约十年。

现在,至于为什么会发生这种情况,您必须回到将Date 转换为date 的时间。您使用了format="%m/%d/%Y",这很好,但不一致。对于大约 2011-10-04 之后的日期,格式从 %m/%d/%y 更改为 %m/%d/%Y(即 10/01/11 到 10/01/2011)。

为避免将来发生这种情况:

  1. 检查您的数据,看看格式是否一致。
  2. 在进行此类转换后检查您的数据。
  3. 您开始担心它的外观之前对您的情节进行排序
  4. 将最小的示例发布到 stackoverflow,这样每个人都不会看错东西,不会投反对票,也不会有兴趣提供帮助。

【讨论】:

  • 感谢 alexwhan...我也注意到了...我很感激...我没有创建假数据集的经验...我只是将我的数据导入...语法是对我来说不是通用语言,我可以轻松地吐出一个随机的假数据集......我理解人们的沮丧......我不是故意让任何人生气。
  • 我认为没有人会生气,当事情可以更清楚地解释时试图提供帮助只是令人沮丧。花一些时间查看投票率很高的问题,看看如何最好地提问。在这种情况下,“假”数据无济于事,因为问题出在您的数据中,而不是您的情节中。请记住接受可以回答您问题的问题,并为任何有帮助的内容点赞,这是一个学习的好地方
【解决方案2】:

这是我尝试过的。

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

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()

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

【讨论】:

  • 你检查估计和实际的日期范围是什么意思????我估计了整个时间范围(2010 年 1 月 1 日至 2012 年 9 月 12 日)的深度,并且我有来自 2011 年 7 月 10 日至 2012 年 9 月 12 日河底的 HOBO 水记录仪的实际数据.
  • 你可能会问我为什么要估计整个时间范围,这是因为我在 2011 年 7 月 10 日设置了水记录仪,但我正在进行鱼类遥测研究和跟踪这些鱼发生在大约 2010 年 10 月 1 日到 2011 年 9 月之间。我想在水记录仪没有出来的时间范围内重新计算河流的深度,所以我用附近河流的数据拟合了一个模型,关系是几乎完美。我使用该等式计算出我正在研究的河流的估计值。
  • 我希望在整个时间范围内显示估计值,以显示我的模型在预测这条河流的水位方面有多好,即使我有 2011 年 7 月 10 日之后的实际数据。
  • 如果估计数据和实际数据在两个不同的时间范围内,我的绘图将起作用......它的估计和实际重叠的地方出现问题..绘图不会绘制深度值从 2011 年 7 月 10 日开始到 2012 年 9 月 12 日的估计组......我的情节与您在您创建的示例数据中的情节相同......一旦估计数据达到实际数据开始的时间范围, 一条直线被绘制到估计线的时间范围的末尾
  • 是的,这只是对@alexwhan 在他的回答中描述的内容的暗示。抱歉,我不明白您对数据的描述(重叠)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2012-01-29
  • 2021-12-01
  • 2016-10-18
  • 2020-11-17
  • 2016-12-17
相关资源
最近更新 更多