在 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")
我正在从事一个使用 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")