[英]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:33:00、10:35:00、10:37:00、10:39:00等
价格(估算):??
我需要以下帮助:
下面是我的代码,我对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.2min
, prices$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.