2015-04-03 142 views
2

我真的很感謝任何幫助在R中創建一個時間序列圖。我是一個總新手,我的編程知識是非常有限的。我只需要創建這個圖,它必須在R中完成,而不是在Excel中完成。每月時間系列圖R在x軸上的年數

,我有以下的月度數據:

Time HML 
200207 6.28 
200208 3.44 
200209 8.03 
... 
201412 1.47 

我有一個很艱難的時間來了解時間變量是如何定義的,或者它應該如何轉換。

現在我需要繪製它等X軸,只有年可見2002年即2003年,2004年,(...),2014年

這裏是我的代碼:

plot(HML, type="l", lwd=2, col="red", ylab= "% return") 
abline(h = 0, col = "black", lty = "solid") 

非常感謝任何幫助。

最好的問候, 馬丁

回答

1

首先,創建一個時間序列對象! (使用ts()

然後繪圖,我猜R只會在X軸上自動顯示年!

#make Time to time series object 
a<-ts(rnorm(150),start=c(2002,7),freq=12);a 
plot(a, type="l", lwd=2, col="red", ylab= "% return",xlim=c(2002,2014),axes=F) 
axis(1,at=2002:2014,labels=2002:2014);axis(2);box() 

解釋代碼:

  1. 開始在ts()裝置的第一次觀測的時間
  2. 頻率是指每單位時間的觀測數。
  3. 我們可以通過xlim來控制X軸的範圍!
  4. 我不知道如何通過代碼輕鬆地顯示所有年份,但我總是使用的一個愚蠢的方法是自己創建一個。因此,在圖中添加axes=F表示不顯示默認軸。然後,創建我希望通過axis()label顯示所有年份的軸!
  5. 最後,圍繞你的照片製作一個盒子! enter image description here

BTW您可以通過輸入R中?ts找到更多詳情!

+0

請詳細說明您的問題更多... – 2015-04-03 11:44:00

+0

謝謝,林!不幸的是,並非所有年份都可見,只有2004年,2006年,2008年,2010年,2012年,2014年。是否有任何方法可以手動更改這個說2002年是x軸的起點? – 2015-04-03 11:48:37

1

使用read.zoo"yearmon"(代表年份和月份)的數據讀入索引。然後使用xaxt="n"對其進行繪製以抑制軸。最後產生自己使用axis只強制歲軸:

Lines <- "Time HML 
200207 6.28 
200208 3.44 
200209 8.03 
201412 1.47" 

library(zoo) 
HML <- read.zoo(text = Lines, header = TRUE, FUN = as.yearmon, format = "%Y%m", 
colClasses = c("character", NA)) 

plot(HML, xaxt = "n", type = "o", xlab = "Year") 
rng <- range(floor(time(HML))) 
axis(1, rng[1]:rng[2]) 

圖像後繼續。

enter image description here

注1:如果你已經有了數據作爲數據幀DF

DF <- read.table(text = Lines, header = TRUE) 

,那麼你可以更換read.zoo語句:

HML <- zoo(DF$HML, as.yearmon(as.character(DF$Time), "%Y%m")) 

注2:我不能說什麼呃實際數據從第一個到最後一個月每個月都有數據,但即使沒有,上面的工作也是如此。

1

有很多方法可以實現這個...這裏是其中之一。我們將使用2002-01至2012-12的假設數據(在這種情況下,差距並不重要)。請注意,我們使用每個月的第一個日期來完成一個完整的日期,通過函數as.POSIXct可以很容易地識別它,它將字符串轉換爲時間對象。

Time <- c("2002-01-01", "2002-02-01", "2003-03-01", "2003-04-01", 
      "2004-05-01", "2004-06-01", "2005-07-01", "2005-08-01", 
      "2006-09-01", "2006-10-01", "2006-11-01", "2008-01-01", 
      "2008-02-01", "2009-02-01", "2009-03-01", "2010-04-01", 
      "2010-05-01", "2010-06-01", "2011-07-01", "2011-08-01", 
      "2012-09-01", "2012-10-01", "2012-11-01", "2012-12-01") 

HML <- rnorm(n = 24, mean = 6, sd = 2) 

dat <- data.frame(Time=as.POSIXct(Time), HML) 
rm(Time, HML) 

然後使用plot功能:

plot(HML ~ Time, type="l", col="red", lwd=2, ylab= "% return", data=dat) 

HML as a function of time

1

使用ggplot2會給你很多的選擇。 autoplot函數接受並繪製zoo對象。

library(ggplot2) 
library(magrittr) 
library(zoo) 

hml_ts <- 
    ts(rnorm(150),start=c(2002,7),freq=12) 

hml_zoo <- 
    as.zoo(hml_ts) 

gg <- 
    hml_zoo %>% 
    autoplot() + 
    xlim(c(2002, end(hml_zoo))) 

gg