簡體   English   中英

R中x軸上的年份的每月時間序列圖

[英]Monthly time series plot with years on x-axis in R

我真的很感謝在R中創建時間序列圖的任何幫助。我是一個新手,我的編程知識真的很有限。 我只需要創建一個圖,就必須用R而不是Excel來完成。

我有以下每月數據:

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")

任何幫助,不勝感激。

最好的問候,馬丁

首先,創建一個時間序列對象! (使用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() start表示第一次觀察的時間
  2. freq表示每單位時間的觀察次數。
  3. 我們可以通過xlim控制X軸的xlim
  4. 我不知道如何輕松地用代碼顯示所有年份,但是我經常使用的愚蠢方法是自己創建一個。 因此,在繪圖中添加axes=F意味着不顯示默認軸。 然后,創建我希望axis()希望顯示的axis()並顯示所有年份的label
  5. 最后,在圖片周圍放一個盒子! 在此處輸入圖片說明

順便說一句,您可以通過在R中鍵入?ts來找到更多詳細信息!

使用read.zoo和類別"yearmon" (代表年份和月份)的索引讀取數據。 然后使用xaxt="n"繪制軸以對其進行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])

續上圖。

在此處輸入圖片說明

注1:如果已經將數據作為數據框DF

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

那么您可以將read.zoo語句替換為:

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

注意2:我無法判斷實際數據是否具有從頭到尾每個月的數據,但是即使沒有,上述工作也是如此。

有很多方法可以實現這一目標...這是其中一種。 我們將使用從2002年1月到2012年12月的假設數據(在這種情況下,差距沒有關系)。 請注意,我們已經使用了每個月的1號來確定完整的日期,可通過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與時間的關系

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM