Данные COVID19 - как мне объединить два набора данных и построить график на одной фигуре? - PullRequest
1 голос
/ 26 марта 2020

Я знаю, как строить диаграммы отдельно, но не знаю, как объединить данные и график в одну фигуру. Моя проблема в том, что исходные данные не включают дней, поэтому я должен рассчитать их и добавить к фрейму данных. и я чувствую, что мой способ сделать это не очень умный.

`library(tidyverse)`

`df <- read_csv("https://covid.ourworldindata.org/data/ecdc/full_data.csv")`

###days vs log  in US

`filt1_US <- df$location %in% "United States"`

`filt2_US <-df$total_cases > 100`

`filt3_US <-df[filt1_US & filt2_US,]`


`daysUS <- seq(1:23)`
         # 23 days (since total cases>100)  3/3 - 3/25

`newUS <- cbind(filt3_US,daysUS)`

`ggplot(data=newUS, aes(x=days, y=total_cases))+
 geom_line(stat = "identity",linejoin = "round",color="red")+
 scale_y_log10()+ 
 xlab("Day of Infection")+
 ylab("Total Number of Cases")+
 ggtitle("Total COVID19 Cases in "US")+
 theme( text = element_text(family="Arial"),
     axis.title.x = element_text(color="DarkGreen",size=20),
     axis.title.y = element_text(color="DarkGreen",size=15),
     axis.text.x = element_text(size=10),
     axis.text.y = element_text(size=10),
     legend.title = element_text(size=15,face = "bold"),
     legend.text = element_text(size=10),         
     plot.title = element_text(color="Dark blue",
                               size=20,face = "bold"))`

дней против журнала в Китае

`filt4_China <- df$location %in% "China"
 filt5_China <-df$total_cases > 100
 filt6_China <-df[filt4_China & filt5_China,]`

`daysChina <- seq(1:67)`            # 67days  1/19 - 3/25

`newChina <- cbind(filt6_China,daysChina)`

`ggplot(data=newChina, aes(x=daysChina, y=total_cases))+
 geom_line(stat = "identity",linejoin = "round",color="red")+
 scale_y_log10()+ 
 xlab("Day of Infection")+
 ylab("Total Number of Cases")+
 ggtitle("Total COVID19 Cases in China")+
 theme( text = element_text(family="Arial"),
     axis.title.x = element_text(color="DarkGreen",size=20),
     axis.title.y = element_text(color="DarkGreen",size=15),
     axis.text.x = element_text(size=10),
     axis.text.y = element_text(size=10),
     legend.title = element_text(size=15,face = "bold"),
     legend.text = element_text(size=10),
     plot.title = element_text(color="Dark blue",
                               size=20,face = "bold"))`

1 Ответ

3 голосов
/ 26 марта 2020

Проще отфильтровать строки для "China и "United States", а затем построить график с эстетикой colour при первоначальном вызове ggplot. Чтобы сделать разницу между странами, я добавил собственную цветовую схему. Изменение по желанию.

df %>%
  filter(location %in% c("China", "United States")) %>%
  group_by(location) %>%
  mutate(days = row_number()) %>%
  ggplot(aes(x = days, y = total_cases, colour = location))+
  geom_line(stat = "identity", linejoin = "round") +
  scale_color_manual(values = c("red", "blue")) +
  scale_y_log10() + 
  xlab("Day of Infection") +
  ylab("Total Number of Cases") +
  ggtitle("Total COVID19 Cases") +
  theme( text = element_text(family="Arial"),
         axis.title.x = element_text(color="DarkGreen",size=20),
         axis.title.y = element_text(color="DarkGreen",size=15),
         axis.text.x = element_text(size=10),
         axis.text.y = element_text(size=10),
         legend.title = element_text(size=15,face = "bold"),
         legend.text = element_text(size=10),
         plot.title = element_text(color="Dark blue",
                                   size=20,face = "bold"))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...