--- title: "Visualization" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Visualization} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 10, fig.height = 6 ) ``` ## Plotting is a bonus, not the core feature The primary goal of `ervissexplore` is to make it easy to **retrieve and filter** ERVISS data. The plotting functions are provided as a convenience for quick exploration, not as a full-featured visualization framework. Since the data is returned as a standard `data.table`, you are free to build any visualization you want using `ggplot2` or any other plotting library. ```{r setup} library(ervissexplore) library(ggplot2) ``` ## Built-in plot functions Each data source has a dedicated `plot_*()` function and a `quick_plot_*()` shortcut. ### Sentinel test positivity ```{r plot-positivity, eval=FALSE} data <- get_sentineltests_positivity( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-06-30"), pathogen = "SARS-CoV-2", countries = c("France", "Germany") ) plot_erviss_positivity(data, date_breaks = "1 month") ``` ### SARS-CoV-2 variants ```{r plot-variants, eval=FALSE} data <- get_erviss_variants( date_min = as.Date("2025-06-01"), date_max = as.Date("2025-12-31"), variant = c("XFG"), countries = c("France", "Belgium") ) plot_erviss_variants(data, date_breaks = "1 month") ``` ### ILI/ARI consultation rates ```{r plot-ili, eval=FALSE} data <- get_ili_ari_rates( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), indicator = "ILIconsultationrate", countries = c("France") ) plot_ili_ari_rates(data, date_breaks = "1 month") ``` ### SARI rates ```{r plot-sari-rates, eval=FALSE} data <- get_sari_rates( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), countries = c("Belgium") ) plot_sari_rates(data, date_breaks = "1 month") ``` ### SARI virological data ```{r plot-sari-positivity, eval=FALSE} data <- get_sari_positivity( date_min = as.Date("2025-01-01"), date_max = as.Date("2025-12-31"), pathogen = "Influenza", indicator = "positivity", countries = c("Belgium") ) plot_sari_positivity(data, date_breaks = "1 month") ``` ### Non-sentinel severity ```{r plot-severity, eval=FALSE} data <- get_nonsentinel_severity( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), pathogen = "SARS-CoV-2", indicator = "hospitaladmissions", countries = c("EU/EEA"), age = "total" ) plot_nonsentinel_severity(data, date_breaks = "1 month") ``` ### Non-sentinel tests/detections ```{r plot-nonsentinel-tests, eval=FALSE} data <- get_nonsentinel_tests( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), pathogen = "Influenza", indicator = "detections", countries = c("France", "Germany") ) plot_nonsentinel_tests(data, date_breaks = "1 month") ``` ## Quick plot shortcuts The `quick_plot_*()` functions combine data fetching and plotting in a single call: ```{r quick-plot, eval=FALSE} # One-liner for ILI rates quick_plot_ili_ari_rates( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), indicator = "ILIconsultationrate", countries = c("France"), date_breaks = "1 month" ) ``` You can also use the generic `quick_plot_erviss_data()`: ```{r quick-plot-generic, eval=FALSE} quick_plot_erviss_data( type = "nonsentinel_severity", date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), pathogen = "SARS-CoV-2", indicator = "hospitaladmissions", countries = c("France", "Spain"), date_breaks = "1 month" ) ``` ## Using the generic `plot_erviss_data()` The generic function dispatches to the right plot function based on the `type` parameter: ```{r generic-plot, eval=FALSE} data <- get_erviss_data( type = "sari_rates", date_min = as.Date("2025-01-01"), date_max = as.Date("2025-12-31"), countries = "Spain" ) plot_erviss_data(data, type = "sari_rates", date_breaks = "1 month") ``` ```{r generic-plot-positivity, eval=FALSE} data <- get_erviss_data( type = "positivity", date_min = as.Date("2024-01-01"), date_max = as.Date("2024-06-30"), pathogen = "SARS-CoV-2", countries = "EU/EEA", indicator = "positivity" ) plot_erviss_data(data, type = "positivity") ``` ## Customizing plots All `plot_*()` functions return standard `ggplot2` objects. You can modify them freely with any `ggplot2` function. ### Changing the theme ```{r custom-theme, eval=FALSE} data <- get_sentineltests_positivity( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-06-30"), pathogen = "SARS-CoV-2", countries = c("France", "Germany") ) plot_erviss_positivity(data) + theme_bw() + theme( legend.position = "top", strip.background = element_rect(fill = "steelblue"), strip.text = element_text(color = "white", face = "bold") ) ``` ### Modifying axes ```{r custom-axes, eval=FALSE} plot_erviss_positivity(data) + scale_x_date( date_breaks = "1 month", date_labels = "%d/%m/%Y" ) + scale_y_continuous( limits = c(0, 50), breaks = seq(0, 50, 10) ) + ylab("Positivity (%)") ``` ### Adding titles and annotations ```{r custom-title, eval=FALSE} plot_erviss_positivity(data) + labs( title = "My custom title", subtitle = "SARS-CoV-2 positivity in France and Germany", caption = "Source: ERVISS / EU-ECDC" ) ``` ### Changing colours ```{r custom-colors, eval=FALSE} data <- get_ili_ari_rates( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), indicator = "ILIconsultationrate", countries = "France" ) plot_ili_ari_rates(data) + scale_colour_brewer(palette = "Set1", name = "Age group") ``` ## Building your own plots from scratch Since the data is a `data.table`, you can bypass the built-in plot functions entirely and create exactly the visualization you need: ```{r custom-full, eval=FALSE} data <- get_nonsentinel_severity( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), pathogen = "SARS-CoV-2", indicator = c("hospitaladmissions", "ICUadmissions"), age = "total", countries = c("France", "Spain") ) ggplot(data, aes(x = date, y = value, fill = indicator)) + geom_col(position = "dodge") + facet_wrap(~countryname, scales = "free_y") + scale_fill_manual( values = c("hospitaladmissions" = "#E69F00", "ICUadmissions" = "#D55E00"), labels = c("Hospital admissions", "ICU admissions"), name = "" ) + labs( title = "SARS-CoV-2 severity indicators", x = NULL, y = "Count", caption = "Source: ERVISS / EU-ECDC" ) + theme_minimal() + theme(legend.position = "top") ``` ```{r custom-heatmap, eval=FALSE} data <- get_ili_ari_rates( date_min = as.Date("2024-01-01"), date_max = as.Date("2024-12-31"), indicator = "ILIconsultationrate", age = "total", countries = c("Spain", "Austria", "Greece") ) ggplot(data, aes(x = date, y = countryname, fill = value)) + geom_tile() + scale_fill_viridis_c(name = "ILI rate") + scale_x_date(date_breaks = "1 month", date_labels = "%b") + labs(title = "ILI consultation rates across Europe", x = NULL, y = NULL) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) ```