【问题标题】:Monthly time series plot with years on x-axis in RR中x轴上的月度时间序列图
【发布时间】:2015-04-03 11:03:50
【问题描述】:

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

非常感谢任何帮助。

最好的问候, 马丁

【问题讨论】:

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


    【解决方案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. start in ts() 表示第一次观察的次数
    2. freq 表示单位时间内的观察次数。
    3. 我们可以通过xlim来控制X轴的范围!
    4. 我不知道如何通过代码轻松显示所有年份,但我一直使用的一种愚蠢方法是自己创建一个。因此,在绘图中添加axes=F 意味着不显示默认轴。然后,通过axis()label 显示所有年份,创建我希望的轴!
    5. 最后,在您的图片周围制作一个框!

    顺便说一句,您可以通过在 R 中键入 ?ts 来找到更多详细信息!

    【讨论】:

    • 谢谢,林!不幸的是,并非所有年份都是可见的,只有 2004、2006、2008、2010、2012、2014 年。有没有办法手动更改它,例如说明 2002 年是 x 轴上的起点?
    【解决方案2】:

    有很多方法可以实现这一点...这是其中之一。我们将使用从 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】:

      使用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:我无法判断实际数据是否有从第一个到最后一个月的数据,但上述工作即使没有。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2021-08-21
          • 2020-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多