View source: R/plot_epicurve.R
| plot_epicurve | R Documentation |
plot_epicurve is a simplifying wrapper around ggplot to
produce curves of cumulative cases versus time. The input
data frame should contain at least:
plot_epicurve( df, filter_expression, date_column = "date", case_column = "count", ..., log = TRUE )
df |
a data frame with columns that include at least a date column and an integer count column |
filter_expression |
an expression that is passed directly to |
date_column |
character(1) the column name of the |
case_column |
character(1) the column name of the |
... |
passed to |
log |
logical(1) TRUE for log10 based y-scale, FALSE for linear |
a date column (or any data type that has a natural time order); this will become the x-axis
a cumulative count column; this will become the y-axis
An additional common use case is to provide a grouping variable
in the data.frame; specifying color=... will draw group-specific
curves on the same plot. See examples.
a ggplot2 object
Other plotting:
align_to_baseline()
Other case-tracking:
align_to_baseline(),
beoutbreakprepared_data(),
bulk_estimate_Rt(),
combined_us_cases_data(),
coronadatascraper_data(),
covidtracker_data(),
ecdc_data(),
estimate_Rt(),
jhu_data(),
nytimes_county_data(),
owid_data(),
test_and_trace_data(),
usa_facts_data(),
who_cases()
library(dplyr)
jhu = jhu_data() %>%
filter(CountryRegion=='China' & subset=='confirmed') %>%
group_by(CountryRegion,date) %>% summarize(count=sum(count))
head(jhu)
jhu %>% plot_epicurve(log=FALSE)
# add a title
library(ggplot2)
jhu %>% plot_epicurve() + ggtitle('Cumulative cases for China')
# Work with testing data
cc = covidtracker_data() %>%
dplyr::mutate(total_tests = positive+negative) %>%
dplyr::filter(total_tests>0)
head(cc)
plot_epicurve(cc, case_column='total_tests', color='state', log=FALSE) +
ggtitle('Total tests by state') +
ggplot2::theme(legend.position='bottom')
# get tests per 100k population
# use the tidycensus package to get
# population data
if(require(tidycensus)) {
pop = tidycensus::get_estimates(geography='state',product='population') %>%
dplyr::filter(variable=='POP')
head(pop)
# fix GEOID column to be 5-digit fips
pop$GEOID=integer_to_fips(as.integer(pop$GEOID))
cc_pop = merge(cc,pop, by.x='fips', by.y='GEOID', all.x=FALSE, all.y=FALSE)
cc_pop = cc_pop %>% mutate(tests_per_100k = total_tests/value * 100000)
plot_epicurve(cc_pop, case_column='tests_per_100k', color='state', log=FALSE) +
ggtitle('Total tests per 100,000 people') +
ggplot2::theme(legend.position='bottom')
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.