Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on ggplot2 functions.
ggplot_rsi( data, position = NULL, x = "antibiotic", fill = "interpretation", facet = NULL, breaks = seq(0, 1, 0.1), limits = NULL, translate_ab = "name", combine_SI = TRUE, combine_IR = FALSE, minimum = 30, language = get_locale(), nrow = NULL, colours = c(S = "#61a8ff", SI = "#61a8ff", I = "#61f7ff", IR = "#ff6961", R = "#ff6961"), datalabels = TRUE, datalabels.size = 2.5, datalabels.colour = "gray15", title = NULL, subtitle = NULL, caption = NULL, x.title = "Antimicrobial", y.title = "Proportion", ... ) geom_rsi( position = NULL, x = c("antibiotic", "interpretation"), fill = "interpretation", translate_ab = "name", minimum = 30, language = get_locale(), combine_SI = TRUE, combine_IR = FALSE, ... ) facet_rsi(facet = c("interpretation", "antibiotic"), nrow = NULL) scale_y_percent(breaks = seq(0, 1, 0.1), limits = NULL) scale_rsi_colours( colours = c(S = "#61a8ff", SI = "#61a8ff", I = "#61f7ff", IR = "#ff6961", R = "#ff6961") ) theme_rsi() labels_rsi_count( position = NULL, x = "antibiotic", translate_ab = "name", minimum = 30, language = get_locale(), combine_SI = TRUE, combine_IR = FALSE, datalabels.size = 3, datalabels.colour = "gray15" )
data | a data.frame with column(s) of class |
---|---|
position | position adjustment of bars, either |
x | variable to show on x axis, either |
fill | variable to categorise using the plots legend, either |
facet | variable to split plots by, either |
breaks | numeric vector of positions |
limits | numeric vector of length two providing limits of the scale, use |
translate_ab | a column name of the antibiotics data set to translate the antibiotic abbreviations to, using |
combine_SI | a logical to indicate whether all values of S and I must be merged into one, so the output only consists of S+I vs. R (susceptible vs. resistant). This used to be the parameter |
combine_IR | a logical to indicate whether all values of I and R must be merged into one, so the output only consists of S vs. I+R (susceptible vs. non-susceptible). This is outdated, see parameter |
minimum | the minimum allowed number of available (tested) isolates. Any isolate count lower than |
language | language of the returned text, defaults to system language (see |
nrow | (when using |
colours | a named vector with colours for the bars. The names must be one or more of: S, SI, I, IR, R or be |
datalabels | show datalabels using |
datalabels.size | size of the datalabels |
datalabels.colour | colour of the datalabels |
title | text to show as title of the plot |
subtitle | text to show as subtitle of the plot |
caption | text to show as caption of the plot |
x.title | text to show as x axis description |
y.title | text to show as y axis description |
... | other parameters passed on to |
At default, the names of antibiotics will be shown on the plots using ab_name()
. This can be set with the translate_ab
parameter. See count_df()
.
geom_rsi()
will take any variable from the data that has an rsi
class (created with as.rsi()
) using rsi_df()
and will plot bars with the percentage R, I and S. The default behaviour is to have the bars stacked and to have the different antibiotics on the x axis.
facet_rsi()
creates 2d plots (at default based on S/I/R) using ggplot2::facet_wrap()
.
scale_y_percent()
transforms the y axis to a 0 to 100% range using ggplot2::scale_y_continuous()
.
scale_rsi_colours()
sets colours to the bars: pastel blue for S, pastel turquoise for I and pastel red for R, using ggplot2::scale_fill_manual()
.
theme_rsi()
is a [ggplot2 theme][ggplot2::theme()
with minimal distraction.
labels_rsi_count()
print datalabels on the bars with percentage and amount of isolates using ggplot2::geom_text()
.
ggplot_rsi()
is a wrapper around all above functions that uses data as first input. This makes it possible to use this function after a pipe (%>%
). See Examples.
The lifecycle of this function is maturing. The unlying code of a maturing function has been roughed out, but finer details might still change. Since this function needs wider usage and more extensive testing, you are very welcome to suggest changes at our repository or write us an email (see section 'Contact Us').
On our website https://msberends.github.io/AMR you can find a comprehensive tutorial about how to conduct AMR analysis, the complete documentation of all functions (which reads a lot easier than here in R) and an example analysis using WHONET data. As we would like to better understand the backgrounds and needs of our users, please participate in our survey!
if (require("ggplot2") & require("dplyr")) { # get antimicrobial results for drugs against a UTI: ggplot(example_isolates %>% select(AMX, NIT, FOS, TMP, CIP)) + geom_rsi() # prettify the plot using some additional functions: df <- example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) ggplot(df) + geom_rsi() + scale_y_percent() + scale_rsi_colours() + labels_rsi_count() + theme_rsi() # or better yet, simplify this using the wrapper function - a single command: example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) %>% ggplot_rsi() # get only proportions and no counts: example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) %>% ggplot_rsi(datalabels = FALSE) # add other ggplot2 parameters as you like: example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) %>% ggplot_rsi(width = 0.5, colour = "black", size = 1, linetype = 2, alpha = 0.25) example_isolates %>% select(AMX) %>% ggplot_rsi(colours = c(SI = "yellow")) } if (FALSE) { # resistance of ciprofloxacine per age group example_isolates %>% mutate(first_isolate = first_isolate(.)) %>% filter(first_isolate == TRUE, mo == as.mo("E. coli")) %>% # `age_group` is also a function of this package: group_by(age_group = age_groups(age)) %>% select(age_group, CIP) %>% ggplot_rsi(x = "age_group") # for colourblind mode, use divergent colours from the viridis package: example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) %>% ggplot_rsi() + scale_fill_viridis_d() # a shorter version which also adjusts data label colours: example_isolates %>% select(AMX, NIT, FOS, TMP, CIP) %>% ggplot_rsi(colours = FALSE) # it also supports groups (don't forget to use the group var on `x` or `facet`): example_isolates %>% select(hospital_id, AMX, NIT, FOS, TMP, CIP) %>% group_by(hospital_id) %>% ggplot_rsi(x = "hospital_id", facet = "antibiotic", nrow = 1, title = "AMR of Anti-UTI Drugs Per Hospital", x.title = "Hospital", datalabels = FALSE) }