按日期顺序绘制数据

Plotting data in order of date

目的是在r中绘制历史情节。使用以下数据

      date new_cases
1   22/01/2020        NA
2   23/01/2020         0
3   24/01/2020         1
4   25/01/2020         0
5   26/01/2020         3
6   27/01/2020         0
7   28/01/2020         0
8   29/01/2020         1
9   30/01/2020         0
10  31/01/2020         2

... etc. 

我从来没有这样画过,我唯一知道的就是用

plot(data$new_cases)

但肯定有更美观的方式来做到这一点? 谢谢

在 base R 中,您可以使用 as.Date 将日期列转换为 date(如上所述)。然后,您可以绘制图表并为其添加标签。

df$date <- as.Date(df$date, "%d/%m/%Y")
plot(new_cases ~ date, df, xaxt = "n", type = "l")
axis(1, df$date, format(df$date, "%d/%m/%Y"), cex.axis = .7)

另一种选择是使用 tidyverse 并转换日期,然后通过管道输入 ggplot2:

library(tidyverse)

df %>% 
  mutate(date = as.Date(date, format =  "%d/%m/%Y")) %>% 
  ggplot(aes(date,new_cases)) +
  geom_line()

或者如果你只是想要积分,那么你可以按照@Dave2e的建议去做:

df$date <- as.Date(df$date, "%d/%m/%Y")

plot(x=df$date, y=df$new_cases)

出于完整性考虑,date 是一个糟糕且有潜在危险的变量名称,我的结果导致命名空间冲突,因为 date 对应于基函数和 lubridate 函数。使用此数据时,我建议您将列重命名为 case_date 或同等名称。

另外,如果您使用 tidyverse you may want to explore lubridate, which is part of tidyverse

# pasted_data <- read.delim(pipe("pbpaste"))
library("tidyverse")
library("tidyr")
library("lubridate")
pasted_data %>%
  separate(
    col = 1,
    sep = "\s+",
    into = c("col_ind", "case_date", "cases"),
    convert = TRUE
  ) %>% 
  mutate(case_date = dmy(case_date)) %>% 
  ggplot(aes(x = case_date, y = cases)) +
  geom_line()

为了后代,以可用格式粘贴,数据应分为不同的列。而在 tidyverse 中,这可以使用 tidy::separate.

来实现