1
0
mirror of https://github.com/msberends/AMR.git synced 2025-02-23 09:10:03 +01:00

(v2.1.1.9144) new MIC scales and fix for rescale_mic()

This commit is contained in:
dr. M.S. (Matthijs) Berends 2025-02-11 08:48:37 +01:00
parent 2171f05951
commit 07757c933c
No known key found for this signature in database
13 changed files with 191 additions and 79 deletions

View File

@ -1,6 +1,6 @@
Package: AMR Package: AMR
Version: 2.1.1.9143 Version: 2.1.1.9144
Date: 2025-02-07 Date: 2025-02-11
Title: Antimicrobial Resistance Data Analysis Title: Antimicrobial Resistance Data Analysis
Description: Functions to simplify and standardise antimicrobial resistance (AMR) Description: Functions to simplify and standardise antimicrobial resistance (AMR)
data analysis and to work with microbial and antimicrobial properties by data analysis and to work with microbial and antimicrobial properties by

View File

@ -321,6 +321,7 @@ export(resistance_predict)
export(retrieve_wisca_parameters) export(retrieve_wisca_parameters)
export(rifamycins) export(rifamycins)
export(right_join_microorganisms) export(right_join_microorganisms)
export(scale_color_mic)
export(scale_colour_mic) export(scale_colour_mic)
export(scale_fill_mic) export(scale_fill_mic)
export(scale_sir_colours) export(scale_sir_colours)

View File

@ -1,4 +1,4 @@
# AMR 2.1.1.9143 # AMR 2.1.1.9144
*(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)* *(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)*

View File

@ -1,6 +1,6 @@
Metadata-Version: 2.2 Metadata-Version: 2.2
Name: AMR Name: AMR
Version: 2.1.1.9143 Version: 2.1.1.9144
Summary: A Python wrapper for the AMR R package Summary: A Python wrapper for the AMR R package
Home-page: https://github.com/msberends/AMR Home-page: https://github.com/msberends/AMR
Author: Matthijs Berends Author: Matthijs Berends

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name='AMR', name='AMR',
version='2.1.1.9143', version='2.1.1.9144',
packages=find_packages(), packages=find_packages(),
install_requires=[ install_requires=[
'rpy2', 'rpy2',

24
R/mic.R
View File

@ -207,7 +207,7 @@ as.mic <- function(x, na.rm = FALSE, keep_operators = "all") {
# remove all after last digit # remove all after last digit
x <- gsub("[^0-9]+$", "", x, perl = TRUE) x <- gsub("[^0-9]+$", "", x, perl = TRUE)
# keep only one zero before dot # keep only one zero before dot
x <- gsub("0+[.]", "0.", x, perl = TRUE) x <- gsub("^0+[.]", "0.", x, perl = TRUE)
# starting 00 is probably 0.0 if there's no dot yet # starting 00 is probably 0.0 if there's no dot yet
x[x %unlike% "[.]"] <- gsub("^00", "0.0", x[!x %like% "[.]"]) x[x %unlike% "[.]"] <- gsub("^00", "0.0", x[!x %like% "[.]"])
# remove last zeroes # remove last zeroes
@ -224,7 +224,7 @@ as.mic <- function(x, na.rm = FALSE, keep_operators = "all") {
x[x.bak != "" & x == ""] <- "invalid" x[x.bak != "" & x == ""] <- "invalid"
na_before <- x[is.na(x) | x == ""] %pm>% length() na_before <- x[is.na(x) | x == ""] %pm>% length()
x[!x %in% VALID_MIC_LEVELS] <- NA x[!as.character(x) %in% VALID_MIC_LEVELS] <- NA
na_after <- x[is.na(x) | x == ""] %pm>% length() na_after <- x[is.na(x) | x == ""] %pm>% length()
if (na_before != na_after) { if (na_before != na_after) {
@ -273,12 +273,22 @@ NA_mic_ <- set_clean_class(factor(NA, levels = VALID_MIC_LEVELS, ordered = TRUE)
) )
#' @rdname as.mic #' @rdname as.mic
#' @param mic_range a manual range to limit the MIC values, e.g., `mic_range = c(0.001, 32)`. Use `NA` to set no limit on one side, e.g., `mic_range = c(NA, 32)`. #' @param mic_range a manual range to limit the MIC values, e.g., `mic_range = c(0.001, 32)`. Use `NA` to prevent a limit on one side, e.g., `mic_range = c(NA, 32)`.
#' @export #' @export
rescale_mic <- function(x, mic_range, keep_operators = "edges", as.mic = TRUE) { rescale_mic <- function(x, mic_range, keep_operators = "edges", as.mic = TRUE) {
meet_criteria(mic_range, allow_class = c("numeric", "integer", "logical"), has_length = 2, allow_NA = TRUE, allow_NULL = TRUE) meet_criteria(mic_range, allow_class = c("numeric", "integer", "logical", "mic"), has_length = 2, allow_NA = TRUE, allow_NULL = TRUE)
if (is.numeric(mic_range)) {
mic_range <- trimws(format(mic_range, scientific = FALSE))
mic_range <- gsub("[.]0+$", "", mic_range)
mic_range[mic_range == "NA"] <- NA_character_
} else if (is.mic(mic_range)) {
mic_range <- as.character(mic_range)
}
stop_ifnot(all(mic_range %in% c(VALID_MIC_LEVELS, NA)), stop_ifnot(all(mic_range %in% c(VALID_MIC_LEVELS, NA)),
"Values in `mic_range` must be valid MIC values. Unvalid: ", vector_and(mic_range[mic_range %in% c(VALID_MIC_LEVELS, NA)])) "Values in `mic_range` must be valid MIC values. ",
"The allowed range is ", format(as.double(as.mic(VALID_MIC_LEVELS)[1]), scientific = FALSE), " to ", format(as.double(as.mic(VALID_MIC_LEVELS)[length(VALID_MIC_LEVELS)]), scientific = FALSE), ". ",
"Unvalid: ", vector_and(mic_range[!mic_range %in% c(VALID_MIC_LEVELS, NA)], quotes = FALSE), ".")
x <- as.mic(x) x <- as.mic(x)
if (is.null(mic_range)) { if (is.null(mic_range)) {
mic_range <- c(NA, NA) mic_range <- c(NA, NA)
@ -297,7 +307,7 @@ rescale_mic <- function(x, mic_range, keep_operators = "edges", as.mic = TRUE) {
x <- as.mic(x, keep_operators = ifelse(keep_operators == "edges", "none", keep_operators)) x <- as.mic(x, keep_operators = ifelse(keep_operators == "edges", "none", keep_operators))
if (isTRUE(as.mic)) { if (isTRUE(as.mic)) {
if (keep_operators == "edges") { if (keep_operators == "edges" && length(x) > 1) {
x[x == min(x, na.rm = TRUE)] <- paste0("<=", x[x == min(x, na.rm = TRUE)]) x[x == min(x, na.rm = TRUE)] <- paste0("<=", x[x == min(x, na.rm = TRUE)])
x[x == max(x, na.rm = TRUE)] <- paste0(">=", x[x == max(x, na.rm = TRUE)]) x[x == max(x, na.rm = TRUE)] <- paste0(">=", x[x == max(x, na.rm = TRUE)])
} }
@ -342,7 +352,7 @@ as.numeric.mic <- function(x, ...) {
#' @rdname as.mic #' @rdname as.mic
#' @method droplevels mic #' @method droplevels mic
#' @param as.mic a [logical] to indicate whether the `mic` class should be kept - the default is `FALSE` #' @param as.mic a [logical] to indicate whether the `mic` class should be kept - the default is `TRUE` for [rescale_mic()] and `FALSE` for [droplevels()]. When setting this to `FALSE` in [rescale_mic()], the output will have factor levels that acknowledge `mic_range`.
#' @export #' @export
droplevels.mic <- function(x, as.mic = FALSE, ...) { droplevels.mic <- function(x, as.mic = FALSE, ...) {
x <- as.mic(x) # make sure that currently implemented MIC levels are used x <- as.mic(x) # make sure that currently implemented MIC levels are used

View File

@ -83,7 +83,7 @@
#' plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl") #' plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl")
#' #'
#' #'
#' # Plotting using scale_x_mic() --------------------------------------------- #' # Plotting using scale_x_mic() -----------------------------------------
#' \donttest{ #' \donttest{
#' if (require("ggplot2")) { #' if (require("ggplot2")) {
#' mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), #' mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
@ -114,6 +114,37 @@
#' labs(title = "with scale_x_mic() using a manual 'outside' range") #' labs(title = "with scale_x_mic() using a manual 'outside' range")
#' } #' }
#' #'
#' # Plotting using scale_y_mic() -----------------------------------------
#' some_groups <- sample(LETTERS[1:5], 20, replace = TRUE)
#' if (require("ggplot2")) {
#' ggplot(data.frame(mic = some_mic_values,
#' group = some_groups),
#' aes(group, mic)) +
#' geom_boxplot() +
#' geom_violin(linetype = 2, colour = "grey", fill = NA) +
#' scale_y_mic()
#' }
#' if (require("ggplot2")) {
#' ggplot(data.frame(mic = some_mic_values,
#' group = some_groups),
#' aes(group, mic)) +
#' geom_boxplot() +
#' geom_violin(linetype = 2, colour = "grey", fill = NA) +
#' scale_y_mic(mic_range = c(NA, 2))
#' }
#'
#' # Plotting using scale_fill_mic() -----------------------------------------
#' some_counts <- as.integer(runif(20, 5, 50))
#' if (require("ggplot2")) {
#' ggplot(data.frame(mic = some_mic_values,
#' group = some_groups,
#' counts = some_counts,
#' aes(group, counts, fill = mic)) +
#' geom_col() +
#' scale_fill_mic(mic_range = c(0.5, 16))
#' }
#'
#' # Auto plotting --------------------------------------------------------
#' if (require("ggplot2")) { #' if (require("ggplot2")) {
#' autoplot(some_mic_values) #' autoplot(some_mic_values)
#' } #' }
@ -124,7 +155,7 @@
#' autoplot(some_sir_values) #' autoplot(some_sir_values)
#' } #' }
#' #'
#' # Plotting using scale_y_percent() ----------------------------------------- #' # Plotting using scale_y_percent() -------------------------------------
#' if (require("ggplot2")) { #' if (require("ggplot2")) {
#' p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), #' p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
#' counts = c(1, 1, 2, 2, 3, 3)), #' counts = c(1, 1, 2, 2, 3, 3)),
@ -145,16 +176,35 @@
#' } #' }
NULL NULL
#' @export create_scale_mic <- function(aest, keep_operators, mic_range, ...) {
#' @inheritParams as.mic ggplot_fn <- getExportedValue(paste0("scale_", aest, "_continuous"),
#' @param drop a [logical] to remove intermediate MIC values, defaults to `FALSE` ns = asNamespace("ggplot2"))
#' @rdname plot args <- list(...)
scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { args[c("trans", "transform", "transform_df", "breaks", "labels", "limits")] <- NULL
stop_ifnot_installed("ggplot2") scale <- do.call(ggplot_fn, args)
meet_criteria(drop, allow_class = "logical", has_length = 1)
scale <- ggplot2::scale_x_discrete(drop = drop, ...) scale$transform <- function(x) {
scale$transform <- function(x, keep_ops = keep_operators, mic_rng = mic_range) { as.double(rescale_mic(x = as.double(x), keep_operators = , "labels", mic_range = mic_range, as.mic = TRUE))
rescale_mic(x = x, keep_operators = keep_ops, mic_range = mic_rng, as.mic = FALSE) }
scale$transform_df <- function(self, df) {
self$`.values_rescaled` <- rescale_mic(x = as.double(df[[aest]]), keep_operators = keep_operators, mic_range = mic_range, as.mic = TRUE)
self$`.values_levels` <- levels(rescale_mic(x = as.double(df[[aest]]), keep_operators = keep_operators, mic_range = mic_range, as.mic = FALSE))
if (length(self$`.values_levels`) > 6 & "0.025" %in% self$`.values_levels`) {
# TODO weird levelling out leading to 0.025 being redundant
self$`.values_levels` <- self$`.values_levels`[self$`.values_levels` != "0.025"]
}
self$`.values_log` <- log2(as.double(self$`.values_rescaled`))
if (aest == "y" && "group" %in% colnames(df)) {
df$group <- as.integer(factor(df$x))
}
df[[aest]] <- self$`.values_log`
df
}
scale$breaks <- function(..., self) log2(as.mic(self$`.values_levels`))
scale$labels <- function(..., self) self$`.values_levels`
scale$limits <- function(..., self) {
rng <- range(log2(as.mic(self$`.values_levels`)))
c(rng[1] - 0.5, rng[2] + 0.5)
} }
scale scale
} }
@ -162,40 +212,34 @@ scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE
#' @export #' @export
#' @inheritParams as.mic #' @inheritParams as.mic
#' @rdname plot #' @rdname plot
scale_y_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, ...) {
stop_ifnot_installed("ggplot2") create_scale_mic("x", keep_operators = keep_operators, mic_range = mic_range, ...)
meet_criteria(drop, allow_class = "logical", has_length = 1)
scale <- ggplot2::scale_y_discrete(drop = drop, ...)
scale$transform <- function(x, keep_ops = keep_operators, mic_rng = mic_range) {
rescale_mic(x = x, keep_operators = keep_ops, mic_range = mic_rng, as.mic = FALSE)
}
scale
} }
#' @export #' @export
#' @inheritParams as.mic #' @inheritParams as.mic
#' @rdname plot #' @rdname plot
scale_colour_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { scale_y_mic <- function(keep_operators = "edges", mic_range = NULL, ...) {
stop_ifnot_installed("ggplot2") create_scale_mic("y", keep_operators = keep_operators, mic_range = mic_range, ...)
meet_criteria(drop, allow_class = "logical", has_length = 1)
scale <- ggplot2::scale_colour_discrete(drop = drop, ...)
scale$transform <- function(x, keep_ops = keep_operators, mic_rng = mic_range) {
rescale_mic(x = x, keep_operators = keep_ops, mic_range = mic_rng, as.mic = FALSE)
}
scale
} }
#' @export #' @export
#' @inheritParams as.mic #' @inheritParams as.mic
#' @rdname plot #' @rdname plot
scale_fill_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { scale_colour_mic <- function(keep_operators = "edges", mic_range = NULL, ...) {
stop_ifnot_installed("ggplot2") create_scale_mic("colour", keep_operators = keep_operators, mic_range = mic_range, ...)
meet_criteria(drop, allow_class = "logical", has_length = 1) }
scale <- ggplot2::scale_fill_discrete(drop = drop, ...)
scale$transform <- function(x, keep_ops = keep_operators, mic_rng = mic_range) { #' @export
rescale_mic(x = x, keep_operators = keep_ops, mic_range = mic_rng, as.mic = FALSE) #' @inheritParams as.mic
} #' @rdname plot
scale scale_color_mic <- scale_colour_mic
#' @export
#' @inheritParams as.mic
#' @rdname plot
scale_fill_mic <- function(keep_operators = "edges", mic_range = NULL, ...) {
create_scale_mic("fill", keep_operators = keep_operators, mic_range = mic_range, ...)
} }
#' @method plot mic #' @method plot mic

View File

@ -1,6 +1,6 @@
This knowledge base contains all context you must know about the AMR package for R. You are a GPT trained to be an assistant for the AMR package in R. You are an incredible R specialist, especially trained in this package and in the tidyverse. This knowledge base contains all context you must know about the AMR package for R. You are a GPT trained to be an assistant for the AMR package in R. You are an incredible R specialist, especially trained in this package and in the tidyverse.
First and foremost, you are trained on version 2.1.1.9143. Remember this whenever someone asks which AMR package version youre at. First and foremost, you are trained on version 2.1.1.9144. Remember this whenever someone asks which AMR package version youre at.
Below are the contents of the file, the file, and all the files (documentation) in the package. Every file content is split using 100 hypens. Below are the contents of the file, the file, and all the files (documentation) in the package. Every file content is split using 100 hypens.
---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------
@ -332,6 +332,7 @@ export(resistance_predict)
export(retrieve_wisca_parameters) export(retrieve_wisca_parameters)
export(rifamycins) export(rifamycins)
export(right_join_microorganisms) export(right_join_microorganisms)
export(scale_color_mic)
export(scale_colour_mic) export(scale_colour_mic)
export(scale_fill_mic) export(scale_fill_mic)
export(scale_sir_colours) export(scale_sir_colours)
@ -2875,9 +2876,9 @@ rescale_mic(x, mic_range, keep_operators = "edges", as.mic = TRUE)
\item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.} \item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.}
\item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to set no limit on one side, e.g., \code{mic_range = c(NA, 32)}.} \item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to prevent a limit on one side, e.g., \code{mic_range = c(NA, 32)}.}
\item{as.mic}{a \link{logical} to indicate whether the \code{mic} class should be kept - the default is \code{FALSE}} \item{as.mic}{a \link{logical} to indicate whether the \code{mic} class should be kept - the default is \code{TRUE} for \code{\link[=rescale_mic]{rescale_mic()}} and \code{FALSE} for \code{\link[=droplevels]{droplevels()}}. When setting this to \code{FALSE} in \code{\link[=rescale_mic]{rescale_mic()}}, the output will have factor levels that acknowledge \code{mic_range}.}
\item{...}{arguments passed on to methods} \item{...}{arguments passed on to methods}
} }
@ -7330,6 +7331,7 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd':
\alias{scale_x_mic} \alias{scale_x_mic}
\alias{scale_y_mic} \alias{scale_y_mic}
\alias{scale_colour_mic} \alias{scale_colour_mic}
\alias{scale_color_mic}
\alias{scale_fill_mic} \alias{scale_fill_mic}
\alias{plot.mic} \alias{plot.mic}
\alias{autoplot.mic} \alias{autoplot.mic}
@ -7347,17 +7349,15 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd':
\alias{labels_sir_count} \alias{labels_sir_count}
\title{Plotting Helpers for AMR Data Analysis} \title{Plotting Helpers for AMR Data Analysis}
\usage{ \usage{
scale_x_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_x_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_y_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_y_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_colour_mic(keep_operators = "edges", mic_range = NULL, scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...)
drop = FALSE, ...)
scale_fill_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_color_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...)
\method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST", \method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST",
main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language
@ -7428,9 +7428,7 @@ labels_sir_count(position = NULL, x = "antibiotic",
\arguments{ \arguments{
\item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.} \item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.}
\item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to set no limit on one side, e.g., \code{mic_range = c(NA, 32)}.} \item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to prevent a limit on one side, e.g., \code{mic_range = c(NA, 32)}.}
\item{drop}{a \link{logical} to remove intermediate MIC values, defaults to \code{FALSE}}
\item{...}{arguments passed on to methods} \item{...}{arguments passed on to methods}
@ -7521,7 +7519,7 @@ plot(some_disk_values, mo = "Escherichia coli", ab = "cipro")
plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl") plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl")
# Plotting using scale_x_mic() --------------------------------------------- # Plotting using scale_x_mic() -----------------------------------------
\donttest{ \donttest{
if (require("ggplot2")) { if (require("ggplot2")) {
mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
@ -7552,6 +7550,37 @@ if (require("ggplot2")) {
labs(title = "with scale_x_mic() using a manual 'outside' range") labs(title = "with scale_x_mic() using a manual 'outside' range")
} }
# Plotting using scale_y_mic() -----------------------------------------
some_groups <- sample(LETTERS[1:5], 20, replace = TRUE)
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups),
aes(group, mic)) +
geom_boxplot() +
geom_violin(linetype = 2, colour = "grey", fill = NA) +
scale_y_mic()
}
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups),
aes(group, mic)) +
geom_boxplot() +
geom_violin(linetype = 2, colour = "grey", fill = NA) +
scale_y_mic(mic_range = c(NA, 2))
}
# Plotting using scale_fill_mic() -----------------------------------------
some_counts <- as.integer(runif(20, 5, 50))
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups,
counts = some_counts,
aes(group, counts, fill = mic)) +
geom_col() +
scale_fill_mic(mic_range = c(0.5, 16))
}
# Auto plotting --------------------------------------------------------
if (require("ggplot2")) { if (require("ggplot2")) {
autoplot(some_mic_values) autoplot(some_mic_values)
} }
@ -7562,7 +7591,7 @@ if (require("ggplot2")) {
autoplot(some_sir_values) autoplot(some_sir_values)
} }
# Plotting using scale_y_percent() ----------------------------------------- # Plotting using scale_y_percent() -------------------------------------
if (require("ggplot2")) { if (require("ggplot2")) {
p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
counts = c(1, 1, 2, 2, 3, 3)), counts = c(1, 1, 2, 2, 3, 3)),

View File

@ -27,9 +27,9 @@ rescale_mic(x, mic_range, keep_operators = "edges", as.mic = TRUE)
\item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.} \item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.}
\item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to set no limit on one side, e.g., \code{mic_range = c(NA, 32)}.} \item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to prevent a limit on one side, e.g., \code{mic_range = c(NA, 32)}.}
\item{as.mic}{a \link{logical} to indicate whether the \code{mic} class should be kept - the default is \code{FALSE}} \item{as.mic}{a \link{logical} to indicate whether the \code{mic} class should be kept - the default is \code{TRUE} for \code{\link[=rescale_mic]{rescale_mic()}} and \code{FALSE} for \code{\link[=droplevels]{droplevels()}}. When setting this to \code{FALSE} in \code{\link[=rescale_mic]{rescale_mic()}}, the output will have factor levels that acknowledge \code{mic_range}.}
\item{...}{arguments passed on to methods} \item{...}{arguments passed on to methods}
} }

View File

@ -5,6 +5,7 @@
\alias{scale_x_mic} \alias{scale_x_mic}
\alias{scale_y_mic} \alias{scale_y_mic}
\alias{scale_colour_mic} \alias{scale_colour_mic}
\alias{scale_color_mic}
\alias{scale_fill_mic} \alias{scale_fill_mic}
\alias{plot.mic} \alias{plot.mic}
\alias{autoplot.mic} \alias{autoplot.mic}
@ -22,17 +23,15 @@
\alias{labels_sir_count} \alias{labels_sir_count}
\title{Plotting Helpers for AMR Data Analysis} \title{Plotting Helpers for AMR Data Analysis}
\usage{ \usage{
scale_x_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_x_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_y_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_y_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_colour_mic(keep_operators = "edges", mic_range = NULL, scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...)
drop = FALSE, ...)
scale_fill_mic(keep_operators = "edges", mic_range = NULL, drop = FALSE, scale_color_mic(keep_operators = "edges", mic_range = NULL, ...)
...)
scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...)
\method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST", \method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST",
main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language
@ -103,9 +102,7 @@ labels_sir_count(position = NULL, x = "antibiotic",
\arguments{ \arguments{
\item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.} \item{keep_operators}{a \link{character} specifying how to handle operators (such as \code{>} and \code{<=}) in the input. Accepts one of three values: \code{"all"} (or \code{TRUE}) to keep all operators, \code{"none"} (or \code{FALSE}) to remove all operators, or \code{"edges"} to keep operators only at both ends of the range.}
\item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to set no limit on one side, e.g., \code{mic_range = c(NA, 32)}.} \item{mic_range}{a manual range to limit the MIC values, e.g., \code{mic_range = c(0.001, 32)}. Use \code{NA} to prevent a limit on one side, e.g., \code{mic_range = c(NA, 32)}.}
\item{drop}{a \link{logical} to remove intermediate MIC values, defaults to \code{FALSE}}
\item{...}{arguments passed on to methods} \item{...}{arguments passed on to methods}
@ -196,7 +193,7 @@ plot(some_disk_values, mo = "Escherichia coli", ab = "cipro")
plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl") plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl")
# Plotting using scale_x_mic() --------------------------------------------- # Plotting using scale_x_mic() -----------------------------------------
\donttest{ \donttest{
if (require("ggplot2")) { if (require("ggplot2")) {
mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), mic_plot <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
@ -227,6 +224,37 @@ if (require("ggplot2")) {
labs(title = "with scale_x_mic() using a manual 'outside' range") labs(title = "with scale_x_mic() using a manual 'outside' range")
} }
# Plotting using scale_y_mic() -----------------------------------------
some_groups <- sample(LETTERS[1:5], 20, replace = TRUE)
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups),
aes(group, mic)) +
geom_boxplot() +
geom_violin(linetype = 2, colour = "grey", fill = NA) +
scale_y_mic()
}
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups),
aes(group, mic)) +
geom_boxplot() +
geom_violin(linetype = 2, colour = "grey", fill = NA) +
scale_y_mic(mic_range = c(NA, 2))
}
# Plotting using scale_fill_mic() -----------------------------------------
some_counts <- as.integer(runif(20, 5, 50))
if (require("ggplot2")) {
ggplot(data.frame(mic = some_mic_values,
group = some_groups,
counts = some_counts,
aes(group, counts, fill = mic)) +
geom_col() +
scale_fill_mic(mic_range = c(0.5, 16))
}
# Auto plotting --------------------------------------------------------
if (require("ggplot2")) { if (require("ggplot2")) {
autoplot(some_mic_values) autoplot(some_mic_values)
} }
@ -237,7 +265,7 @@ if (require("ggplot2")) {
autoplot(some_sir_values) autoplot(some_sir_values)
} }
# Plotting using scale_y_percent() ----------------------------------------- # Plotting using scale_y_percent() -------------------------------------
if (require("ggplot2")) { if (require("ggplot2")) {
p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")),
counts = c(1, 1, 2, 2, 3, 3)), counts = c(1, 1, 2, 2, 3, 3)),