mirror of
https://github.com/msberends/AMR.git
synced 2025-12-16 06:30:21 +01:00
302 lines
9.0 KiB
Markdown
302 lines
9.0 KiB
Markdown
# 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()`
|
||
|
||
# }
|
||
```
|