【问题标题】:How do I make R lattice xyplot ignore gaps in time and make a continuous timeseries plot?如何让 R lattice xyplot 忽略时间间隔并制作连续的时间序列图?
【发布时间】:2014-04-13 21:17:57
【问题描述】:

我有一个正在尝试绘制的 xts 系列。该系列包含一个月的日内日期,周末的数据有缺口。我在 R 中使用 xyplot (lattice) 来绘制时间序列,并且对结果非常满意。

不幸的是,这些情节保留了周末的空白。我想忽略周末的间隔,让我的时间序列情节连续,如果有人指出我正确的方向,我将不胜感激。

当前命令是:

xyplot(close~MyTime, type='l', col='black',ylab='',xlab='', main='Test')

我尝试了 JohnPaul 的方法,它“几乎”有效。标签虽然存在,但无法正确呈现。最后一个标签只到 1 月 3 日,而实际数据一直延伸到 2 月。使用的命令是:

PlotOrd<-order(Mytime)
xyplot(close~PlotOrd, type='l', col='black',ylab='',xlab='', main='Close',scales=list( x=list( labels=MyTime))  )

【问题讨论】:

    标签: r xts lattice


    【解决方案1】:

    如果我理解正确的话,你想做的就是让周末完全不出现在情节中。一种方法是制作另一个向量,它是您希望绘制close 的顺序 - 一个不包括周末的向量。假设周末不包括在 time 中,这应该可以工作:

    PlotOrd<-order(Mytime)
    
    xyplot(close~PlotOrd, type='l', col='black',ylab='',xlab='', main='Test')
    

    这将为您提供正确的绘图,但您的 x 轴刻度标签将只是来自 PlotOrd 的数字。如果您想将它们保留为日期,请为 x 轴添加 scales 参数,如下所示:

    xyplot(close~PlotOrd, type='l', col='black',ylab='',xlab='', main='Test',
    scales=list( x=list( labels=Mytime )) )
    

    编辑

    控制轴标签的一种方法是也使用at 参数。这里有点笨拙,我希望我能想出一个更优雅的想法,但这会奏效:

    xyplot(close~PlotOrd, type='l', col='black',ylab='',xlab='', main='Test',
    scales=list( x=list(at=c(50,100,150,200), labels=Mytime[c(50,100,150,200)] )) )
    

    这将在观测值 50,100,150 和 200 处添加刻度,并将给出来自 MyTime 的相应值作为标签。缺点是你必须自己写在刻度上。您可以添加一些代码来生成一系列值。假设您每 15 天需要一个标签。如果你计算出对应的测量值,你可以创建一个相距很远的数字序列(称之为MyTicks)。然后喂给at=MyTickslabels=MyTime[MyTicks]。还是让格子为你挑选蜱虫会更好......

    【讨论】:

    • 您好 John Paul,感谢您的回复。什么是 PlotOrdxyp ?我认为它与 PlotOrd 相同。事实上,当我将索引更改为整数时,我可以在一个连续图中得到它们,但是我会丢失日期。当我尝试您建议的第二种方法时,我收到一个错误:ans$labels[ok] 中的错误:'closure' 类型的对象不是子集
    • @user1480926 - 应该是 PlotOrd - 抱歉我在上面修复了错字。我对第二个错误的猜测是 time 是 R 中的一个函数的名称,因此它很混乱,无法对您的称为“时间”的数据进行处理。尝试重命名或将您的“时间”放入具有唯一名称并且应该可以工作的新向量中。我使用MyTime 作为新向量编辑了上面的答案。
    • 嗨,是的,这很有效,非常感谢!谢谢你解释得这么清楚
    • 嗨,约翰保罗,时代不太行。请参阅上面的附图,了解当我按照您的建议进行操作时会发生什么
    • 请注意,数据的时间范围是五分钟,图表延伸到整个月。时间的原始渲染考虑到了这一点,并且似乎正确地绘制了日期,但 scale 命令似乎不喜欢它。
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 2020-06-08
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多