每月时间序列图,在X轴上的年份为x

时间:2015-04-03 11:03:51

标签: r plot charts time-series axis-labels

我非常感谢在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")

任何帮助都非常感激。

祝你好运, 马丁

4 个答案:

答案 0 :(得分: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. freq表示每单位时间的观察次数。
  3. 我们可以通过xlim来控制X轴的范围!
  4. 我不知道如何通过代码轻松地显示所有年份,但我总是使用的一种愚蠢的方法是自己创建一个。因此,在绘图中添加axes=F表示不显示默认轴。然后,axis()创建我希望的轴,label显示所有年份!
  5. 最后,在你的照片周围制作一个方框! enter image description here
  6. BTW您可以在R中键入?ts来查找更多详细信息!

答案 1 :(得分: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:我无法确定实际数据是否包含从第一个到最后一个月的每个月的数据,但即使没有,也可以进行上述工作。

答案 2 :(得分:1)

有很多方法可以实现这一目标......这是其中之一。我们将使用从2002-01到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 as a function of time

答案 3 :(得分: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