簡體   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