Use these functions to create bar plots for antimicrobial resistance analysis. All functions rely on internal 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, language = get_locale(), fun = count_df,
  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 = NULL, y.title = NULL,
  ...)

geom_rsi(position = NULL, x = c("Antibiotic", "Interpretation"),
  fill = "Interpretation", translate_ab = "name",
  language = get_locale(), combine_SI = TRUE, combine_IR = FALSE,
  fun = count_df, ...)

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", combine_SI = TRUE, combine_IR = FALSE,
  datalabels.size = 3, datalabels.colour = "gray15")

Arguments

data

a data.frame with column(s) of class "rsi" (see as.rsi)

position

position adjustment of bars, either "fill" (default when fun is count_df), "stack" (default when fun is portion_df) or "dodge"

x

variable to show on x axis, either "Antibiotic" (default) or "Interpretation" or a grouping variable

fill

variable to categorise using the plots legend, either "Antibiotic" (default) or "Interpretation" or a grouping variable

facet

variable to split plots by, either "Interpretation" (default) or "Antibiotic" or a grouping variable

breaks

numeric vector of positions

limits

numeric vector of length two providing limits of the scale, use NA to refer to the existing minimum or maximum

translate_ab

a column name of the antibiotics data set to translate the antibiotic abbreviations to, using ab_property

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, but this now follows the redefinition by EUCAST about the interpretion of I (increased exposure) in 2019, see section 'Interpretation of S, I and R' below. Default is TRUE.

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 combine_SI.

language

language of the returned text, defaults to system language (see get_locale) and can also be set with getOption("AMR_locale"). Use language = NULL or language = "" to prevent translation.

fun

function to transform data, either count_df (default) or portion_df

nrow

(when using facet) number of rows

colours

a named vector with colours for the bars. The names must be one or more of: S, SI, I, IR, R or be FALSE to use default ggplot2 colours.

datalabels

show datalabels using labels_rsi_count, will only be shown when fun = count_df

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 geom_rsi

Details

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.

The functions
geom_rsi will take any variable from the data that has an rsi class (created with as.rsi) using fun (count_df at default, can also be portion_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 facet_wrap.

scale_y_percent transforms the y axis to a 0 to 100% range using scale_continuous.

scale_rsi_colours sets colours to the bars: pastel blue for S, pastel turquoise for I and pastel red for R, using scale_brewer.

theme_rsi is a ggplot theme with minimal distraction.

labels_rsi_count print datalabels on the bars with percentage and amount of isolates using 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.

Read more on our website!

On our website https://msberends.gitlab.io/AMR you can find a 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.

Examples

# NOT RUN {
library(dplyr)
library(ggplot2)

# get antimicrobial results for drugs against a UTI:
ggplot(septic_patients %>% select(AMX, NIT, FOS, TMP, CIP)) +
  geom_rsi()

# prettify the plot using some additional functions:
df <- septic_patients %>% 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:
septic_patients %>%
  select(AMX, NIT, FOS, TMP, CIP) %>%
  ggplot_rsi()

# get only portions and no counts:
septic_patients %>%
  select(AMX, NIT, FOS, TMP, CIP) %>%
  ggplot_rsi(fun = portion_df)

# add other ggplot2 parameters as you like:
septic_patients %>%
  select(AMX, NIT, FOS, TMP, CIP) %>%
  ggplot_rsi(width = 0.5,
             colour = "black",
             size = 1,
             linetype = 2,
             alpha = 0.25)

septic_patients %>%
  select(AMX) %>%
  ggplot_rsi(colours = c(SI = "yellow"))

# resistance of ciprofloxacine per age group
septic_patients %>%
  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")
# }# NOT RUN {
# for colourblind mode, use divergent colours from the viridis package:
septic_patients %>%
  select(AMX, NIT, FOS, TMP, CIP) %>%
  ggplot_rsi() + scale_fill_viridis_d()
# a shorter version which also adjusts data label colours:
septic_patients %>%
  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`):
septic_patients %>%
  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)

# genuine analysis: check 3 most prevalent microorganisms
septic_patients %>%
  # create new bacterial ID's, with all CoNS under the same group (Becker et al.)
  mutate(mo = as.mo(mo, Becker = TRUE)) %>%
  # filter on top three bacterial ID's
  filter(mo %in% top_freq(freq(.$mo), 3)) %>%
  # filter on first isolates
  filter_first_isolate() %>%
  # get short MO names (like "E. coli")
  mutate(bug = mo_shortname(mo, Becker = TRUE)) %>%
  # select this short name and some antiseptic drugs
  select(bug, CXM, GEN, CIP) %>%
  # group by MO
  group_by(bug) %>%
  # plot the thing, putting MOs on the facet
  ggplot_rsi(x = "Antibiotic",
             facet = "bug",
             translate_ab = FALSE,
             nrow = 1,
             title = "AMR of Top Three Microorganisms In Blood Culture Isolates",
             subtitle = expression(paste("Only First Isolates, CoNS grouped according to Becker ", italic("et al."), " (2014)")),
             x.title = "Antibiotic (Ears-Net code)")
# }