【问题标题】:How can I plot a dataframe in R given in quarterly years?如何在 R 中绘制每季度给出的数据框?
【发布时间】:2021-03-11 00:21:10
【问题描述】:

我有一个数据集:

   Country Time      Value
1   USA    1999-Q1   292929
2   USA    1999-Q2   392023
3.  USA    1999-Q3   9392992
4

....等等。现在我想绘制这个数据框,时间在 x 轴上,y 是值。但我面临的问题是我不知道如何绘制时间。因为它没有在月/日/年中给出。如果是这样的话,我只会编码as.Date( format = "%m%d%y")。我不允许更改季度名称。所以当我绘制它时,它应该保持这种状态。我该怎么做?

提前谢谢你!

【问题讨论】:

    标签: r time time-series series quarter


    【解决方案1】:

    假设 DF 在最后的注释中显示,将 Time 列转换为直接表示年份和季度的 yearqtr 类(而不是使用 Date 类)并使用 scale_x_yearqtr。请参阅?scale_x_yearqtr 了解更多信息。

    library(ggplot2)
    library(zoo)
    
    fmt <- "%Y-Q%q"
    DF$Time <- as.yearqtr(DF$Time, format = fmt)
    ggplot(DF, aes(Time, Value, col = Country)) + 
      geom_point() + 
      geom_line() +
      scale_x_yearqtr(format = fmt)
    

    (在图形之后继续)

    也可以将其转换为每个国家一列的宽格式动物园对象,然后使用autoplot。使用下面注释中的DF

    fmt <- "%Y-Q%q"
    z <- read.zoo(DF, split = "Country", index = "Time", 
      FUN = as.yearqtr, format = fmt)
    autoplot(z) + scale_x_yearqtr(format = fmt)
    

    注意

    Lines <- "
    Country Time Value 
    1 USA 1999-Q1 292929 
    2 USA 1999-Q2 392023 
    3 USA 1999-Q3 9392992"
    DF <- read.table(text = Lines)
    

    【讨论】:

    • 虽然如果我自己绘制可能会这样做,但值得注意的是时间列的格式意味着时间顺序和字典顺序是相同的,所以转换为如果只需要一个带有直接标签的简单图,则不同的格式可能只会增加复杂性。还是我没有抓住重点?
    • 是的,尽管 OP 确实说他们不允许更改季度名称,并且使用组美学仍然可以绘制线图。我完全不同意您的方法 - 我正在观察与时间顺序一致的因子水平,以及这如何允许捷径来满足 OP 的规范。
    • @Allan,这是一个时间序列,时间序列通常绘制为线,而不是条形图。此外,这不太可能是唯一需要做的事情。最好先将数据转换成合理的形式,然后再进行处理。
    【解决方案2】:

    使用ggplot2:

    library(ggplot2)
    
    ggplot(df, aes(Time, Value, fill = Country)) + geom_col()
    

    【讨论】:

      【解决方案3】:

      我知道其他人已经回答了,但我认为这个更一般的答案也应该在这里。

      当你做as.Date()时,你只能做开始。我在你的数据框上试过了(我叫它df),它奏效了:

      > as.Date(df$Time, format = "%Y")
      [1] "1999-11-28" "1999-11-28" "1999-11-28"
      

      现在,我不知道你是否想使用plot()ggplot()ggplot2 库……我不知道,没关系。但是你想指定y轴,你可以这样做。

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多