我非常感谢在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")
任何帮助都非常感激。
祝你好运, 马丁
答案 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()
解释代码:
ts()
开始表示第一次观察的次数xlim
来控制X轴的范围!axes=F
表示不显示默认轴。然后,axis()
创建我希望的轴,label
显示所有年份! 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])
继图像之后。
注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)
答案 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