我目前正在尝试在一个数据框中用ggplot创建2列图形
我正在绘制日期与数值的图表。我使用dplyr库来创建数据框架。
is_china <- confirmed_cases_worldwide %>%
filter(country == "China", type=='confirmed') %>%
mutate(cumu_cases = cumsum(cases))
我相信原因是由于y值是cumsum函数的结果列,但不确定。
该表看起来像这样,最后一列是目标y值。
2020-01-22 NA China 31.8257 117.2264 confirmed 1 1
2 2020-01-23 NA China 31.8257 117.2264 confirmed 8 9
3 2020-01-24 NA China 31.8257 117.2264 confirmed 6 15
4 2020-01-25 NA China 31.8257 117.2264 confirmed 24 39
5 2020-01-26 NA China 31.8257 117.2264 confirmed 21 60
6 2020-01-27 NA China 31.8257 117.2264 confirmed 10 70
7 2020-01-28 NA China 31.8257 117.2264 confirmed 36 106
8 2020-01-29 NA China 31.8257 117.2264 confirmed 46 152
当我用列的情况(表上第二列到最后一列)做图时,它很好,但当我尝试用累积的情况做图时,图形非常不稳定。
我不知道为什么
你想按国家分组,但只有一个国家。
library(dplyr)
is_china <- confirmed_cases_worldwide %>%
filter(country == "China", type=='confirmed') %>%
mutate(date = as.Date(date))
unique(is_china$country)
# [1] "China"
然而, lat
和 long
变量有33个区分,说明我们有面板数据。所以,如果不考虑面板结构,你会得到奇怪的值与 cumsum
此外,变量已经存在,我们不需要再次计算它。总的来说,这就解释了你得到的那些奇怪的线条。
由于 province
变量为空,我们可以使用 lat
和 long
以产生新的 gps
变量进行分组。
unique(is_china$lat)
# [1] 31.8257 40.1824 30.0572 26.0789 ... [33] 29.1832
unique(is_china$long)
# [1] 117.2264 116.4142 107.8740 117.9874 ... [33] 120.0934
is_china$gps <- apply(is_china[4:5], 1, function(x) Reduce(paste, x))
现在我们可以使用 gps
作为 factor
.
library(ggplot2)
ggplot(is_china, aes(x=date, y=cumu_cases, color=factor(gps))) +
geom_line()
要只选择特定的坐标,您可以对数据进行子集,例如。
ggplot(is_china[is_china$gps %in% c("30.9756 112.2707", "22.3 114.2"), ],
aes(x=date, y=cumu_cases, color=factor(gps))) +
geom_line()
数据:
confirmed_cases_worldwide <-
read.csv("https://raw.githubusercontent.com/king-sules/Covid/master/china_vs_world.csv")