I have cobbled together a short script to plot Covid-19 data.
setwd("~/Apps/Models/1-CoronaVirus")
library(tidyverse)
library(lubridate)
datO <-
read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv")
datO[ ,1] <- ymd(datO[ ,1])
dfO <- tibble::as_tibble(data.frame(datO[ ,"date"],datO[
,"positive"],datO[ ,"negative"],datO[ ,"total"]))
dfO %>%
ggplot(aes(x = datO[ ,"date"],y = datO[ ,"positive"]))+
geom_point(color = 'red', size = 0.025)+
geom_point(y = datO[ ,"negative"], color = 'blue', size =
0.025)+
geom_point(y = datO[ ,"total"], color = "green", size =
0.025)+
theme(axis.text.x = element_text(angle=30, hjust=1))+
theme_bw()+
scale_y_continuous(limits = c(0,1750000))+
labs(x = "Date", y = "Number of Tests")+
ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
theme(plot.title = element_text(hjust = 0.5))+
scale_fill_discrete(name = "Test", labels = c("Positive",
"Negative",
"Total"))
Here is the plot:
but, if I want lines rather that the code (the aspplicable plines) uis:
ggplot(aes(x = datO[ ,"date"],y = datO[ ,"positive"]))+
geom_line(linetype = "solid",color = 'red')+
geom_line(linetype = "dotdash",y = datO[ ,"negative"],
color = 'blue')+
geom_line(linetype = "twodash",y = datO[ ,"total"], color
= "green")+
Now two of the plots are reversed. Google has not been a friend in
finding a solution.
Help will be much appreciated.
Thanks in advance
--
Stephen P. Molnar, Ph.D.
www.molecular-modeling.net
614.312.7528 (c)
Skype: smolnar1
Hello,
This type of problem is almost always a data reshaping problem.
ggplot graphics work better if the data is in the long format and you
have 3 columns for counts, one column for each category. If you reformat
from the current wide format to the long format you will have a date
vector, a categorical variable and a counts variable.
In the code below just change geom_point to geom_line and the problem is
solved.
library(tidyverse)
library(lubridate)
datO <-
read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv")
datO[ ,1] <- ymd(datO[ ,1])
dfO <- tibble::as_tibble(data.frame(date = datO[ ,"date"],
positive = datO[ ,"positive"],
negative = datO[ ,"negative"],
total = datO[ ,"total"]))
dfO %>%
pivot_longer(
cols = -date,
names_to = "cases",
values_to = "count"
) %>%
mutate(cases = factor(cases, levels = c("positive",
"negative",
"total"))) %>%
ggplot(aes(date, count, color = cases)) +
geom_point() +
scale_color_manual(name = "Test",
labels = c("Positive", "Negative",
"Total"),
values = c("red", "blue",
"green")) +
ylim(0, 1750000) +
labs(x = "Date", y = "Number of Tests")+
ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
theme_bw() +
theme(axis.text.x = element_text(angle = 30, hjust = 1),
plot.title = element_text(hjust = 0.5))
Hope this helps,
Rui Barradas
?s 02:00 de 17/08/20, Stephen P. Molnar escreveu:> I have cobbled together a short script to plot Covid-19 data.
>
> setwd("~/Apps/Models/1-CoronaVirus")
>
> library(tidyverse)
> library(lubridate)
>
> datO <-
read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv")
> datO[ ,1] <- ymd(datO[ ,1])
>
> dfO <- tibble::as_tibble(data.frame(datO[ ,"date"],datO[
> ,"positive"],datO[ ,"negative"],datO[
,"total"]))
>
> dfO %>%
> ? ggplot(aes(x = datO[ ,"date"],y = datO[
,"positive"]))+
> ? geom_point(color = 'red', size = 0.025)+
> ? geom_point(y = datO[ ,"negative"], color = 'blue',
size = 0.025)+
> ? geom_point(y = datO[ ,"total"], color = "green",
size = 0.025)+
> ? theme(axis.text.x = element_text(angle=30, hjust=1))+
> ? theme_bw()+
> ? scale_y_continuous(limits = c(0,1750000))+
> ? labs(x = "Date", y = "Number of Tests")+
> ? ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
> ? theme(plot.title = element_text(hjust = 0.5))+
> ? scale_fill_discrete(name = "Test", labels =
c("Positive", "Negative",
> "Total"))
>
> Here is the plot:
>
>
>
>
> but, if I want lines rather that the code (the aspplicable plines) uis:
>
> ggplot(aes(x = datO[ ,"date"],y = datO[ ,"positive"]))+
> ? geom_line(linetype = "solid",color = 'red')+
> ? geom_line(linetype = "dotdash",y = datO[
,"negative"], color = 'blue')+
> ? geom_line(linetype = "twodash",y = datO[ ,"total"],
color = "green")+
>
>
>
>
> Now two of the plots are reversed. Google has not been a friend in
> finding a solution.
>
> Help will be much appreciated.
>
> Thanks in advance
>
Hello,
Sorry, I forgot you also want the line type changed.
Remove color and linetype from the initial call to ggplot and include
aes(color = cases, linetype = cases) in geom_line. Then add a layer
scale_linetype_manual with the same name and labels to merge it with the
color legend.
dfO %>%
pivot_longer(
cols = -date,
names_to = "cases",
values_to = "count"
) %>%
mutate(cases = factor(cases, levels = c("positive",
"negative",
"total"))) %>%
ggplot(aes(date, count)) +
#geom_point() +
geom_line(aes(color = cases, linetype = cases)) +
scale_color_manual(name = "Test",
labels = c("Positive", "Negative",
"Total"),
values = c("red", "blue",
"green")) +
scale_linetype_manual(name = "Test",
labels = c("Positive", "Negative",
"Total"),
values = c("solid", "dotdash",
"twodash")) +
ylim(0, 1750000) +
labs(x = "Date", y = "Number of Tests")+
ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
theme_bw() +
theme(axis.text.x = element_text(angle = 30, hjust = 1),
plot.title = element_text(hjust = 0.5))
Hope this helps,
Rui Barradas
?s 06:49 de 17/08/20, Rui Barradas escreveu:> Hello,
>
> This type of problem is almost always a data reshaping problem.
> ggplot graphics work better if the data is in the long format and you
> have 3 columns for counts, one column for each category. If you reformat
> from the current wide format to the long format you will have a date
> vector, a categorical variable and a counts variable.
>
> In the code below just change geom_point to geom_line and the problem is
> solved.
>
>
> library(tidyverse)
> library(lubridate)
>
> datO <-
read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv")
> datO[ ,1] <- ymd(datO[ ,1])
>
> dfO <- tibble::as_tibble(data.frame(date = datO[ ,"date"],
> ??????????????????????????????????? positive = datO[
,"positive"],
> ??????????????????????????????????? negative = datO[
,"negative"],
> ??????????????????????????????????? total = datO[ ,"total"]))
>
> dfO %>%
> ? pivot_longer(
> ??? cols = -date,
> ??? names_to = "cases",
> ??? values_to = "count"
> ? ) %>%
> ? mutate(cases = factor(cases, levels = c("positive",
"negative",
> "total"))) %>%
> ? ggplot(aes(date, count, color = cases)) +
> ? geom_point() +
> ? scale_color_manual(name = "Test",
> ???????????????????? labels = c("Positive",
"Negative", "Total"),
> ???????????????????? values = c("red", "blue",
"green")) +
> ? ylim(0, 1750000) +
> ? labs(x = "Date", y = "Number of Tests")+
> ? ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
> ? theme_bw() +
> ? theme(axis.text.x = element_text(angle = 30, hjust = 1),
> ??????? plot.title = element_text(hjust = 0.5))
>
>
>
> Hope this helps,
>
> Rui Barradas
>
>
> ?s 02:00 de 17/08/20, Stephen P. Molnar escreveu:
>> I have cobbled together a short script to plot Covid-19 data.
>>
>> setwd("~/Apps/Models/1-CoronaVirus")
>>
>> library(tidyverse)
>> library(lubridate)
>>
>> datO <-
read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv")
>> datO[ ,1] <- ymd(datO[ ,1])
>>
>> dfO <- tibble::as_tibble(data.frame(datO[ ,"date"],datO[
>> ,"positive"],datO[ ,"negative"],datO[
,"total"]))
>>
>> dfO %>%
>> ?? ggplot(aes(x = datO[ ,"date"],y = datO[
,"positive"]))+
>> ?? geom_point(color = 'red', size = 0.025)+
>> ?? geom_point(y = datO[ ,"negative"], color = 'blue',
size = 0.025)+
>> ?? geom_point(y = datO[ ,"total"], color = "green",
size = 0.025)+
>> ?? theme(axis.text.x = element_text(angle=30, hjust=1))+
>> ?? theme_bw()+
>> ?? scale_y_continuous(limits = c(0,1750000))+
>> ?? labs(x = "Date", y = "Number of Tests")+
>> ?? ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+
>> ?? theme(plot.title = element_text(hjust = 0.5))+
>> ?? scale_fill_discrete(name = "Test", labels =
c("Positive",
>> "Negative", "Total"))
>>
>> Here is the plot:
>>
>>
>>
>>
>> but, if I want lines rather that the code (the aspplicable plines) uis:
>>
>> ggplot(aes(x = datO[ ,"date"],y = datO[
,"positive"]))+
>> ?? geom_line(linetype = "solid",color = 'red')+
>> ?? geom_line(linetype = "dotdash",y = datO[
,"negative"], color =
>> 'blue')+
>> ?? geom_line(linetype = "twodash",y = datO[
,"total"], color = "green")+
>>
>>
>>
>>
>> Now two of the plots are reversed. Google has not been a friend in
>> finding a solution.
>>
>> Help will be much appreciated.
>>
>> Thanks in advance
>>
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
Many thanks. That solved the problem. On 08/17/2020 01:49 AM, Rui Barradas wrote:> Hello, > > This type of problem is almost always a data reshaping problem. > ggplot graphics work better if the data is in the long format and you > have 3 columns for counts, one column for each category. If you > reformat from the current wide format to the long format you will have > a date vector, a categorical variable and a counts variable. > > In the code below just change geom_point to geom_line and the problem > is solved. > > > library(tidyverse) > library(lubridate) > > datO <- read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv") > datO[ ,1] <- ymd(datO[ ,1]) > > dfO <- tibble::as_tibble(data.frame(date = datO[ ,"date"], > positive = datO[ ,"positive"], > negative = datO[ ,"negative"], > total = datO[ ,"total"])) > > dfO %>% > pivot_longer( > cols = -date, > names_to = "cases", > values_to = "count" > ) %>% > mutate(cases = factor(cases, levels = c("positive", "negative", > "total"))) %>% > ggplot(aes(date, count, color = cases)) + > geom_point() + > scale_color_manual(name = "Test", > labels = c("Positive", "Negative", "Total"), > values = c("red", "blue", "green")) + > ylim(0, 1750000) + > labs(x = "Date", y = "Number of Tests")+ > ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+ > theme_bw() + > theme(axis.text.x = element_text(angle = 30, hjust = 1), > plot.title = element_text(hjust = 0.5)) > > > > Hope this helps, > > Rui Barradas > > > ??s 02:00 de 17/08/20, Stephen P. Molnar escreveu: >> I have cobbled together a short script to plot Covid-19 data. >> >> setwd("~/Apps/Models/1-CoronaVirus") >> >> library(tidyverse) >> library(lubridate) >> >> datO <- read.csv("https://api.covidtracking.com/v1/states/oh/daily.csv") >> datO[ ,1] <- ymd(datO[ ,1]) >> >> dfO <- tibble::as_tibble(data.frame(datO[ ,"date"],datO[ >> ,"positive"],datO[ ,"negative"],datO[ ,"total"])) >> >> dfO %>% >> ggplot(aes(x = datO[ ,"date"],y = datO[ ,"positive"]))+ >> geom_point(color = 'red', size = 0.025)+ >> geom_point(y = datO[ ,"negative"], color = 'blue', size = 0.025)+ >> geom_point(y = datO[ ,"total"], color = "green", size = 0.025)+ >> theme(axis.text.x = element_text(angle=30, hjust=1))+ >> theme_bw()+ >> scale_y_continuous(limits = c(0,1750000))+ >> labs(x = "Date", y = "Number of Tests")+ >> ggtitle("COVID-19 Tests in Ohio \n (8/15/20)")+ >> theme(plot.title = element_text(hjust = 0.5))+ >> scale_fill_discrete(name = "Test", labels = c("Positive", >> "Negative", "Total")) >> >> Here is the plot: >> >> >> >> >> but, if I want lines rather that the code (the aspplicable plines) uis: >> >> ggplot(aes(x = datO[ ,"date"],y = datO[ ,"positive"]))+ >> geom_line(linetype = "solid",color = 'red')+ >> geom_line(linetype = "dotdash",y = datO[ ,"negative"], color = >> 'blue')+ >> geom_line(linetype = "twodash",y = datO[ ,"total"], color = "green")+ >> >> >> >> >> Now two of the plots are reversed. Google has not been a friend in >> finding a solution. >> >> Help will be much appreciated. >> >> Thanks in advance >> >-- Stephen P. Molnar, Ph.D. www.molecular-modeling.net 614.312.7528 (c) Skype: smolnar1