繁体   English   中英

如何估算Y轴的值,以便我在R中的时间序列(X轴)上具有相等的间隔

[英]Howto estimate values of Y axis, so that I have equal interval on timeseries(X-Axis) in R

我在带有日期时间对象的MYSQL中有一个表,并且包含列(价格),这是在特定时间的特定价格。

[1] "2015-06-25 10:33:02 IST" "2015-06-25 10:35:32 IST"
[3] "2015-06-25 10:38:02 IST" "2015-06-25 10:40:02 IST"
[5] "2015-06-25 10:42:02 IST" "2015-06-25 10:44:02 IST"
[7] "2015-06-25 10:46:02 IST" "2015-06-25 10:49:02 IST"
[9] "2015-06-25 10:51:32 IST" "2015-06-25 10:53:02 IST"
[11] "2015-06-25 10:55:32 IST" "2015-06-25 10:57:32 IST"
[13] "2015-06-25 10:59:32 IST" "2015-06-25 11:01:02 IST"
[15] "2015-06-25 11:03:32 IST" "2015-06-25 11:05:32 IST"
[17] "2015-06-25 11:07:32 IST" "2015-06-25 11:09:02 IST"

现在,您看到表中每一行的时间间隔不是恒定的。 我想在价格和时间之间绘制图形,我想将X轴(时间)保持固定的间隔,并尝试绘制估算的Y值(价格)

例如:
时间序列:10:3​​3:00、10:35:00、10:37:00、10:39:00等
价格(估算):??

我需要以下帮助:

  1. 如何获得考虑两个附近价格的Y轴估计值。
  2. 我想绘制所有这些固定的间隔点,但是X轴应该以2小时为间隔显示比例。

下面是我的代码,我对R还是很陌生,因此,如果我要问的是非常基本的内容,请原谅。

x<-data[,"idUnique"]
y<-data[,"Price"]
z<-data[,"datetime"]
z<-strptime(z, format="%d-%b-%Y %H:%M:%S",tz="IST") 
meanpivot<-mean(y)
meanx<-mean(x)
plot(x, y, type="l", col="red", xlim=c(meanx-400, meanx+400), ylim=c(meanpivot*0.99, meanpivot*1.01))

现在我在X轴上使用IDUnique,但我想继续使用Time(z)。

任何帮助表示赞赏。 提前致谢 !!

作为未来问题的补充说明-拥有一个小且可重现的问题示例将非常有趣。 到目前为止,我们无法复制粘贴您的代码以进行试用,因为我们无法访问data 我的答案演示了如何制作可复制的示例(即,您可以将其直接复制粘贴到R控制台中,并且可以正常工作)。

答案的要点是使用approx来插值每个时间间隔的价格,然后使用您选择的软件包对它们进行绘制,将x轴间隔调整为您想要的任何值。

据我了解您的问题,您的数据包含一列日期时间和一列价格,例如:

# make an example dataframe with one value per (approximately) minute
x <- data.frame(datetime = as.POSIXct('2015-07-15 13:48:42') + jitter((1:60)*60),
                price = runif(60))

现在,我想每2分钟计算一次价格(根据您的示例)。 首先,我们生成一个要计算的时间向量:

# a vector of times from 13:50 every 2 minutes for an hour.
times.2min <- as.POSIXct('2015-07-15 13:50:00') + (0:29)*2*60

注意-您无法插值原始日期时间范围以外的时间,因此在创建时间时要特别注意。 times.2min

现在要计算这些时间的价格,我们可以进行插值。 我只是做线性逼近; 有关详细信息,请参见?approx

prices <- approx(x$datetime, x$price, xout=times.2min)

prices$x是我们的时间times.2minprices$y是这些时间的计算价格。

然后,只需绘制即可:

plot(y ~ x, prices, type='l')

x轴刻度线会自动确定为不太混乱。 如果您想自己指定它们(例如,我每20分钟在这里做一次)

x.axis.ticks <- seq(from=round(min(prices$x), 'hour'),
                    to=round(max(prices$x), 'hour'),
                    by=20*60) # 14:00, 14:20, 14:40, 15:00
# plot points, skip x axis
plot(y ~ x, prices, type='l', xaxt='n')
# plot x axis
axis(1, at=x.axis.ticks, labels=as.character(x.axis.ticks))

在此处输入图片说明

或者,如果您喜欢使用ggplot获得更漂亮的东西

library(ggplot2)
ggplot(data.frame(prices), aes(x=x, y=y)) +
    geom_line() +
    scale_x_datetime(breaks=date_breaks(width="20 min"))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM