2015-04-03 139 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