【问题标题】:Plotting a time series with ggplot geom_line使用 ggplot geom_line 绘制时间序列
【发布时间】:2021-11-08 08:28:04
【问题描述】:

我正在尝试根据不同的数据集绘制多个时间序列图。第一个数据集完美绘制。

library(tidyverse)
library(dplyr)
data("economics")

economics %>% 
  ggplot(aes(date, unemploy, pop)) + 
  geom_line(col = "maroon") + 
  xlab("Year") + 
  ylab("U.S. Unemployment Rate")

第二个数据集可能需要一些额外的条件,但本质上它显示的是相同类型的数据,但绘制的不是相同的。数据可以在这里找到https://fiscaldata.treasury.gov/datasets/debt-to-the-penny/debt-to-the-penny

library(tidyverse)
library(dplyr)
data(debt)

debt <- read.csv("C:##path here to the data")

debt %>%
  filter(Calendar.Month.Number==12 & Calendar.Day.Number==31) %>% 
  ggplot(aes(Calendar.Year, Debt.Held.by.the.Public)) +
  geom_line(col = "blue")

我应该做些什么不同的事情?

【问题讨论】:

  • 看起来debt 中的 x 和 y 变量作为因子而不是数字被读入 R。使用str(debt) 查看您有哪些列类型。
  • 从您提供的 URL 中查看 CSV,我认为最简单的解决方案是使用 read_csv(来自 readr,tidyverse 的一部分)而不是 read.csv。前者读取具有正确列类型的数据以进行绘图(日期和数字)。
  • 谢谢。您知道将 chr 转换为日期的方法吗?这似乎是两者之间的区别。
  • 天才。那行得通。
  • 我在下面的答案中提供了更多详细信息。如果它有助于解决您的问题,请投票/接受它。

标签: r ggplot2 timeserieschart


【解决方案1】:

这里的问题是read.csv 默认将Record.Date 列读取为类型字符。 ggplot 然后将日期变量解释为一个因素,而您想要 x 轴上的日期类型。

您可以通过几种方式解决此问题。

  1. 使用readr::read_csv。在这种情况下,该列将被读取为日期类型,因为它采用标准的“年-月-日”格式,但并非总是如此。

  2. 使用colClasses 参数指定列类型。

    debt <- read.csv("DebtPenny_20160909_20210909.csv", colClasses = c("Record.Date" = "Date"))
    
  3. 读取数据后转换为类型日期。

    debt$Record.Date <- as.Date(debt$Record.Date)
    

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2021-06-06
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多