在 R 中绘制数据 - ggplot 或其他绘图

Plotting data in R - ggplot or other plot

我正在从事一个使用 Covid 数据的项目,我希望绘制(然后比较)来自三个国家的 covid 数据:荷兰、德国、法国都在同一个绘图上。

我想将 x-axis 命名为“日期”,将 y-axis 命名为“确诊病例数”,并将图例的标题命名为“各国的 COVID 病例”。

到目前为止,我已经使用来自所有三个县的数据创建了一个名为“dfFinal”的最终数据框。我包含的 ggplot 不起作用 (因为我不知道如何编码)。我只是无法绘制信息。有人可以帮忙吗?数据已使用 Jsonlite 收集和读取,并且很容易 re-created 而无需 data-set。

结构(列表(国家= c(“荷兰”,“荷兰”,“荷兰”, "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", "荷兰", “荷兰”,“荷兰”),日期 = 结构(c(18317,18318, 18319, 18320, 18321, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 18329, 18330, 18331), class = "日期"), 案例 = c(0L, 1L, 6L, 10L, 18L, 24L, 38L, 82L, 128L, 188L, 265L, 321L, 382L, 503L, 603L)), row.names = 36:50, class = "data.frame")

install.packages("jsonlite", dependencies = TRUE)
library("jsonlite")

tmp <- readLines("https://pomber.github.io/covid19/timeseries.json")
jsonLot <- fromJSON(tmp)

myjsonLot <- toJSON(jsonLot, pretty=TRUE)
fileConn <- file(paste0("Covid19_timeseries.json"))
writeLines(myjsonLot, fileConn)


dfN <- data.frame(Country = c("Netherlands"), Date = c(jsonLot$Netherlands$date), Cases = 
c(jsonLot$Netherlands$confirmed))
dfN[,]

dfG <- data.frame(Country = c("Germany"), Date = c(jsonLot$Germany$date), Cases = 
c(jsonLot$Germany$confirmed))
dfG[,]

dfF <- data.frame(Country = c("France"), Date = c(jsonLot$France$date), Cases = 
c(jsonLot$France$confirmed))
dfF[,]

dfFinal <- rbind.fill(dfN, dfG, dfF)
View(dfFinal)

ggplot(dfFinal, aes(x=Date, y=Cases) + geom_line(size=1) +
xlab("Date") + ylab("Number of confirmed cases") + scale_x_datetime(breaks = "1 day") +
geom_line(aes(y=dfN$Cases), colour ="red") +
geom_line(aes(y=dfG$Cases), colour ="red") +
geom_line(aes(y=dfF$Cases), colour ="red"))

您的代码不起作用,因为您应该在外部而不是内部向 ggplot() 添加其他调用,例如 geom_line()xlab()。我修好了:

dfFinal$Date <- as.POSIXct(dfFinal$Date)

ggplot(dfFinal, aes(x=Date, y=Cases, group=Country)) + 
  geom_line(size=1) +
  xlab("Date") + 
  ylab("Number of confirmed cases") + 
  scale_x_datetime(breaks = "1 day")

我还添加了 Date 变量的转换,因为当您读取 JSON 时它的格式不正确。

但是,你的代码风格不是很好。我以更符合 tidy R 代码标准的方式重新创建了您的其余数据转换。

library(jsonlite)
library(dplyr)  # for data transformation and piping
library(purrr)  # for mapping and binding
library(ggplot2)

# combine function calls by piping them, see help for `%>%` for details
dat <- readLines("~/../Desktop/timeseries.json") %>% fromJSON() 

# for each of the data frames in the json append the name of the data.frame as 
# "Country" variable and then bind all of them 
dat <- imap_dfr(dat, ~ .x, .id = "Country") %>%
  mutate(Date = as.POSIXct(date)) %>% # transform date into a proper format
  filter(Country %in% c("Netherlands", "France", "Germany")) # filter data by focus countries

ggplot(dat, aes(x = Date, y = confirmed, group = Country, color = Country)) + 
  geom_line(size=1) +
  ggtitle("Number of COVID-19 casses in selected countries") +
  xlab("Date") + 
  ylab("Number of confirmed cases")