# AMR Plots with `ggplot2`

Use these functions to create bar plots for AMR data analysis. All
functions rely on
[ggplot2](https://ggplot2.tidyverse.org/reference/ggplot.html)
functions.

## Usage

``` r
ggplot_sir(
  data,
  position = NULL,
  x = "antibiotic",
  fill = "interpretation",
  facet = NULL,
  breaks = seq(0, 1, 0.1),
  limits = NULL,
  translate_ab = "name",
  combine_SI = TRUE,
  minimum = 30,
  language = get_AMR_locale(),
  nrow = NULL,
  colours = c(S = "#3CAEA3", SDD = "#8FD6C4", SI = "#3CAEA3", I = "#F6D55C", IR =
    "#ED553B", R = "#ED553B"),
  datalabels = TRUE,
  datalabels.size = 2.5,
  datalabels.colour = "grey15",
  title = NULL,
  subtitle = NULL,
  caption = NULL,
  x.title = "Antimicrobial",
  y.title = "Proportion",
  ...
)

geom_sir(
  position = NULL,
  x = c("antibiotic", "interpretation"),
  fill = "interpretation",
  translate_ab = "name",
  minimum = 30,
  language = get_AMR_locale(),
  combine_SI = TRUE,
  ...
)
```

## Arguments

- data:

  A [data.frame](https://rdrr.io/r/base/data.frame.html) with column(s)
  of class [`sir`](https://amr-for-r.org/reference/as.sir.md) (see
  [`as.sir()`](https://amr-for-r.org/reference/as.sir.md)).

- position:

  Position adjustment of bars, either `"fill"`, `"stack"` 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:

  A [numeric](https://rdrr.io/r/base/numeric.html) vector of positions.

- limits:

  A [numeric](https://rdrr.io/r/base/numeric.html) 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
  [antimicrobials](https://amr-for-r.org/reference/antimicrobials.md)
  data set to translate the antibiotic abbreviations to, using
  [`ab_property()`](https://amr-for-r.org/reference/ab_property.md).

- combine_SI:

  A [logical](https://rdrr.io/r/base/logical.html) to indicate whether
  all values of S, SDD, and I must be merged into one, so the output
  only consists of S+SDD+I vs. R (susceptible vs. resistant) - the
  default is `TRUE`.

- minimum:

  The minimum allowed number of available (tested) isolates. Any isolate
  count lower than `minimum` will return `NA` with a warning. The
  default number of `30` isolates is advised by the Clinical and
  Laboratory Standards Institute (CLSI) as best practice, see *Source*.

- language:

  Language of the returned text - the default is the current system
  language (see
  [`get_AMR_locale()`](https://amr-for-r.org/reference/translate.md))
  and can also be set with the package option
  [`AMR_locale`](https://amr-for-r.org/reference/AMR-options.md). Use
  `language = NULL` or `language = ""` to prevent translation.

- nrow:

  (when using `facet`) number of rows.

- colours:

  A named vactor with colour to be used for filling. The default colours
  are colour-blind friendly.

- datalabels:

  Show datalabels using
  [`labels_sir_count()`](https://amr-for-r.org/reference/plot.md).

- 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 arguments passed on to `geom_sir()` or, in case of
  [`scale_sir_colours()`](https://amr-for-r.org/reference/plot.md),
  named values to set colours. The default colours are colour-blind
  friendly, while maintaining the convention that e.g. 'susceptible'
  should be green and 'resistant' should be red. See *Examples*.

## Details

At default, the names of antimicrobials will be shown on the plots using
[`ab_name()`](https://amr-for-r.org/reference/ab_property.md). This can
be set with the `translate_ab` argument. See
[`count_df()`](https://amr-for-r.org/reference/count.md).

`geom_sir()` will take any variable from the data that has an
[`sir`](https://amr-for-r.org/reference/as.sir.md) class (created with
[`as.sir()`](https://amr-for-r.org/reference/as.sir.md)) using
[`sir_df()`](https://amr-for-r.org/reference/proportion.md) and will
plot bars with the percentage S, I, and R. The default behaviour is to
have the bars stacked and to have the different antimicrobials on the x
axis.

Additional functions include:

- [`facet_sir()`](https://amr-for-r.org/reference/plot.md) creates 2d
  plots (at default based on S/I/R) using
  [`ggplot2::facet_wrap()`](https://ggplot2.tidyverse.org/reference/facet_wrap.html).

- [`scale_y_percent()`](https://amr-for-r.org/reference/plot.md)
  transforms the y axis to a 0 to 100% range using
  [`ggplot2::scale_y_continuous()`](https://ggplot2.tidyverse.org/reference/scale_continuous.html).

- [`scale_sir_colours()`](https://amr-for-r.org/reference/plot.md) sets
  colours to the bars (green for S, yellow for I, and red for R). with
  multilingual support. The default colours are colour-blind friendly,
  while maintaining the convention that e.g. 'susceptible' should be
  green and 'resistant' should be red.

- [`theme_sir()`](https://amr-for-r.org/reference/plot.md) is a [ggplot2
  theme](https://ggplot2.tidyverse.org/reference/theme.html) with
  minimal distraction.

- [`labels_sir_count()`](https://amr-for-r.org/reference/plot.md) print
  datalabels on the bars with percentage and amount of isolates using
  [`ggplot2::geom_text()`](https://ggplot2.tidyverse.org/reference/geom_text.html).

`ggplot_sir()` 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*.

## Examples

``` r
# \donttest{
if (require("ggplot2") && require("dplyr")) {
  # get antimicrobial results for drugs against a UTI:
  ggplot(example_isolates %>% select(AMX, NIT, FOS, TMP, CIP)) +
    geom_sir()
}

if (require("ggplot2") && require("dplyr")) {
  # prettify the plot using some additional functions:
  df <- example_isolates %>% select(AMX, NIT, FOS, TMP, CIP)
  ggplot(df) +
    geom_sir() +
    scale_y_percent() +
    scale_sir_colours(aesthetics = "fill") +
    labels_sir_count() +
    theme_sir()
}

if (require("ggplot2") && require("dplyr")) {
  # or better yet, simplify this using the wrapper function - a single command:
  example_isolates %>%
    select(AMX, NIT, FOS, TMP, CIP) %>%
    ggplot_sir()
}

if (require("ggplot2") && require("dplyr")) {
  # get only proportions and no counts:
  example_isolates %>%
    select(AMX, NIT, FOS, TMP, CIP) %>%
    ggplot_sir(datalabels = FALSE)
}

if (require("ggplot2") && require("dplyr")) {
  # add other ggplot2 arguments as you like:
  example_isolates %>%
    select(AMX, NIT, FOS, TMP, CIP) %>%
    ggplot_sir(
      width = 0.5,
      colour = "black",
      size = 1,
      linetype = 2,
      alpha = 0.25
    )
}
#> Warning: Ignoring unknown parameters: `size`

if (require("ggplot2") && require("dplyr")) {
  # you can alter the colours with colour names:
  example_isolates %>%
    select(AMX) %>%
    ggplot_sir(colours = c(SI = "yellow"))
}

if (require("ggplot2") && require("dplyr")) {
  # but you can also use the built-in colour-blind friendly colours for
  # your plots, where "S" is green, "I" is yellow and "R" is red:
  data.frame(
    x = c("Value1", "Value2", "Value3"),
    y = c(1, 2, 3),
    z = c("Value4", "Value5", "Value6")
  ) %>%
    ggplot() +
    geom_col(aes(x = x, y = y, fill = z)) +
    scale_sir_colours(
      aesthetics = "fill",
      Value4 = "S", Value5 = "I", Value6 = "R"
    )
}

if (require("ggplot2") && require("dplyr")) {
  # resistance of ciprofloxacine per age group
  example_isolates %>%
    mutate(first_isolate = first_isolate()) %>%
    filter(
      first_isolate == TRUE,
      mo == as.mo("Escherichia coli")
    ) %>%
    # age_groups() is also a function in this AMR package:
    group_by(age_group = age_groups(age)) %>%
    select(age_group, CIP) %>%
    ggplot_sir(x = "age_group")
}
#> Warning: Removed 6 rows containing missing values or values outside the scale range
#> (`geom_col()`).
#> Warning: Removed 6 rows containing missing values or values outside the scale range
#> (`geom_text()`).

if (require("ggplot2") && require("dplyr")) {
  # a shorter version which also adjusts data label colours:
  example_isolates %>%
    select(AMX, NIT, FOS, TMP, CIP) %>%
    ggplot_sir(colours = FALSE)
}

if (require("ggplot2") && require("dplyr")) {
  # it also supports groups (don't forget to use the group var on `x` or `facet`):
  example_isolates %>%
    filter(mo_is_gram_negative(), ward != "Outpatient") %>%
    # select only UTI-specific drugs
    select(ward, AMX, NIT, FOS, TMP, CIP) %>%
    group_by(ward) %>%
    ggplot_sir(
      x = "ward",
      facet = "antibiotic",
      nrow = 1,
      title = "AMR of Anti-UTI Drugs Per Ward",
      x.title = "Ward",
      datalabels = FALSE
    )
}
#> ℹ Using column mo as input for `mo_is_gram_negative()`

# }
```
