在r中用日期绘制时间序列图的问题

problem plotting time series graph in r with date

我需要绘制时间序列图,但事实证明我使用的数据非常具有挑战性。

理想情况下,我想要一个看起来像这样的图表:

但是我的是这样的:

我尝试了一系列不同的方法,但其中 none 有效。

可以找到数据集here and I'll attach a picture of what the dataset itself looks like:

我试过的一些代码包括

  ggplot( aes(x=date, y=northEast)) +
  geom_area(fill="#69b3a2", alpha=0.5) +
  geom_line(color="#69b3a2") +
  ylab("test") +
  theme_ipsum()
ggplot(covidData2) +
  geom_line(
    mapping = aes(x = weekBeginning, y=northEast, group=northEast)
  )

如有任何帮助,我们将不胜感激!

您需要在绘制之前整理数据。如果您查看数据框,所有“数字”列都已被解释为字符向量,因为列名是嵌套的,因此出现在前几行中。您需要合并这些并将它们转换为列名。然后,您需要将数字列转换为数字。最后,您需要解析日期,因为 ggplot 会将句点简单地读取为字符向量:

library(readxl)
library(lubridate)
library(ggplot2)
library(hrbrthemes)

wb <- read_xlsx(path.expand("~/covid.xlsx"), sheet = "Table 9")

df <- as.data.frame(wb)

df[1, 1] <- ""

for(i in 2:length(df)) {
  if(is.na(df[1, i])) df[1, i] <- df[1, i - 1]
}

nms <- trimws(paste(df[1,], df[2,]))

df <- df[-c(1:2),]
names(df) <- nms
df <- df[sapply(df, function(x) !all(is.na(x)))]

df[-1] <- lapply(df[-1], as.numeric)
df     <- head(df, -3)
df$Period <- dmy(substr(df$Period, 1, 10))

现在我们可以绘图了:

ggplot(df, aes(x = Period, y = `North East Rate`)) +
  geom_area(fill = "#69b3a2", alpha=0.5) +
  geom_line(color = "#69b3a2") +
  ylab("Rate per 100,000") +
  xlab("") +
  theme_ipsum()

reprex package (v2.0.1)

于 2022-03-08 创建