ggplot无法正确显示

时间:2020-05-23 22:35:21

标签: r ggplot2 dplyr cumsum

我目前正在尝试绘制使用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

当我使用列案例(在表上倒数第二)对此进行绘图时,很好,但是当我尝试使用累积案例进行图形化时,该图形非常混乱:

enter image description here

我不确定为什么。

2 个答案:

答案 0 :(得分:0)

这是一种方法:

library(ggplot2)
ggplot(is_china,aes(x = as.Date(date),y = cumu_cases)) +
   geom_line()

enter image description here

答案 1 :(得分:0)

您正在尝试按国家/地区分组,但是只有一个国家/地区。

library(dplyr)
is_china <- confirmed_cases_worldwide %>%
  filter(country == "China", type=='confirmed') %>%
  mutate(date = as.Date(date))

unique(is_china$country)
# [1] "China"

但是,latlong变量具有33个区别,表示我们拥有面板数据。因此,如果不考虑面板结构,使用cumsum会得到奇怪的值;此外,变量已经存在,我们不需要再次计算。总体而言,这解释了您所得到的奇怪之处。

由于province变量为空,我们可以使用latlong生成新的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()

enter image description here

要仅选择特定的坐标,可以对数据进行子集化,例如:

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()

enter image description here


数据:

confirmed_cases_worldwide <- 
  read.csv("https://raw.githubusercontent.com/king-sules/Covid/master/china_vs_world.csv")