I'm very new to R and ggplot and totally self-taught. I'm trying to recreate a chart that appears on a UK government Coronavirus website.
I can't seem to get ggplot to create a legend at all. I want the legend to show 3 things: (grey) Most recent 5 days (incomplete), (steelblue) Number of cases, and (blue line) Cases (7 day average).
I'm confident that I can make the axis look nice, format the dates, etc, I've just been struggling to do the legend.
Thanks for looking.
# Libraries
library(tidyverse)
#Data
England_Rates <- read.csv("https://api.coronavirus.data.gov.uk/v2/data?areaType=nation&areaCode=E92000001&metric=newCasesBySpecimenDate&format=csv")
England_Rates$AveragenewCasesBySpecimenDate <- rollapply(England_Rates$newCasesBySpecimenDate, 7, mean, align = "right", fill=NA)
England_Rates$data_colour <- "steelblue"
England_Rates$data_colour[1] <- NA
England_Rates$data_colour[2] <- "grey"
England_Rates$data_colour[3] <- "grey"
England_Rates$data_colour[4] <- "grey"
England_Rates$data_colour[5] <- "grey"
England_Rates$data_colour[6] <- "grey"
ggplot() +
geom_col(aes(x = England_Rates$date, y = England_Rates$newCasesBySpecimenDate),colour=England_Rates$data_colour) +
geom_line(aes(x = England_Rates$date, y = England_Rates$AveragenewCasesBySpecimenDate), size=1.2, colour="blue", group=1)
https://coronavirus.data.gov.uk/details/cases
WORKING CODE
library(tidyverse)
#Data
England_Rates <- read.csv("https://api.coronavirus.data.gov.uk/v2/data?areaType=nation&areaCode=E92000001&metric=newCasesBySpecimenDate&format=csv")
England_Rates$AveragenewCasesBySpecimenDate <- rollapply(England_Rates$newCasesBySpecimenDate, 7, mean, align = "right", fill=NA)
England_Rates$data_colour <- "Number of cases"
England_Rates$data_colour[1] <- NA
England_Rates$data_colour[2] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[3] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[4] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[5] <- "Most recent 5 days (incomplete)"
England_Rates$data_colour[6] <- "Most recent 5 days (incomplete)"
data <- data.frame (Date = as.Date(England_Rates_3$date),
Cases = England_Rates$newCasesBySpecimenDate.x,
"Cases (7-day Average)" = England_Rates$AveragenewCasesBySpecimenDate,
BlueorGrey = England_Rates$data_type)
group.colors <- c("Number of cases" = "#5694ca", "Most recent 5 days (incomplete)"="dark grey","Cases 7 day (Average)"="dark blue" )
ggplot(data,
aes(x=Date, y=Cases, fill=BlueorGrey))+
theme(
text = element_text(color = "black"),
axis.text=element_text(colour="black"),
panel.background = element_rect(fill = "white",
colour = "white",
size = 0.5, linetype = "solid"),
panel.grid.major = element_line(size = 0.5, linetype = 'twodash',
colour = "light grey"),
panel.grid.minor = element_line(size = 0.25, linetype = 'twodash',
colour = "light grey"),
legend.title = element_blank(),
legend.position = "bottom",
legend.box = "vertical",
axis.title=element_blank())+
geom_bar(stat = "identity", width=1) +
scale_fill_manual(values=group.colors) +
geom_line(aes(y=Cases..7.day.Average., fill="Cases 7 day (Average)"), colour="dark blue", size=0.8)