From 07757c933c31d752a5987a891cdb24084c3ff7a5 Mon Sep 17 00:00:00 2001 From: Matthijs Berends Date: Tue, 11 Feb 2025 08:48:37 +0100 Subject: [PATCH] (v2.1.1.9144) new MIC scales and fix for `rescale_mic()` --- DESCRIPTION | 4 +- NAMESPACE | 1 + NEWS.md | 2 +- PythonPackage/AMR/AMR.egg-info/PKG-INFO | 2 +- ...ny.whl => AMR-2.1.1.9144-py3-none-any.whl} | Bin 10254 -> 10253 bytes PythonPackage/AMR/dist/amr-2.1.1.9143.tar.gz | Bin 10072 -> 0 bytes PythonPackage/AMR/dist/amr-2.1.1.9144.tar.gz | Bin 0 -> 10080 bytes PythonPackage/AMR/setup.py | 2 +- R/mic.R | 24 ++-- R/plotting.R | 116 ++++++++++++------ ....txt => gpt_training_text_v2.1.1.9144.txt} | 61 ++++++--- man/as.mic.Rd | 4 +- man/plot.Rd | 54 ++++++-- 13 files changed, 191 insertions(+), 79 deletions(-) rename PythonPackage/AMR/dist/{AMR-2.1.1.9143-py3-none-any.whl => AMR-2.1.1.9144-py3-none-any.whl} (85%) delete mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9143.tar.gz create mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9144.tar.gz rename data-raw/{gpt_training_text_v2.1.1.9143.txt => gpt_training_text_v2.1.1.9144.txt} (99%) diff --git a/DESCRIPTION b/DESCRIPTION index ab1b15bf0..1773aa1a3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 2.1.1.9143 -Date: 2025-02-07 +Version: 2.1.1.9144 +Date: 2025-02-11 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) data analysis and to work with microbial and antimicrobial properties by diff --git a/NAMESPACE b/NAMESPACE index 445aee39a..c97dbf123 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -321,6 +321,7 @@ export(resistance_predict) export(retrieve_wisca_parameters) export(rifamycins) export(right_join_microorganisms) +export(scale_color_mic) export(scale_colour_mic) export(scale_fill_mic) export(scale_sir_colours) diff --git a/NEWS.md b/NEWS.md index cb7e07030..e55957eba 100644 --- a/NEWS.md +++ b/NEWS.md @@ -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).)* diff --git a/PythonPackage/AMR/AMR.egg-info/PKG-INFO b/PythonPackage/AMR/AMR.egg-info/PKG-INFO index f146f9511..0d11eea39 100644 --- a/PythonPackage/AMR/AMR.egg-info/PKG-INFO +++ b/PythonPackage/AMR/AMR.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: AMR -Version: 2.1.1.9143 +Version: 2.1.1.9144 Summary: A Python wrapper for the AMR R package Home-page: https://github.com/msberends/AMR Author: Matthijs Berends diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9143-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9144-py3-none-any.whl similarity index 85% rename from PythonPackage/AMR/dist/AMR-2.1.1.9143-py3-none-any.whl rename to PythonPackage/AMR/dist/AMR-2.1.1.9144-py3-none-any.whl index 5e69bbaf9cfbb458b571b584d676956e353d1f75..54ddf209ba16fc3fdf9f8d086a838186bd3f0ac8 100644 GIT binary patch delta 657 zcmeAR=ndcv@MdNaVPIh3V9>Pl-pE_d$_%78x3h|{fEn{RZ*p_!+IdI4Z+2ImTrVog zXfk=GXcc4ZW)ZP!UL}ysy1pNeV}K?^1F;+sJNgFc8tEAVp{1dT$>fd7Wz0ZjleJXj zfO>uP(d+uc3VgrVTht>00 zgTk8miyIhHizA(wP9E(_$~gOI$sx_tm;K!rd+gov>;3#X?x*J^g54~S&AzSF^FG~` zy( zbM=@IiQ|1XOO%{4mmXf&Yh>iIb^ED+mjTaK)Lg81aIt#kp;;?NflgOg=ztEIG(gtzdz1UGy-ud)ALL45tSzisFL zG)fCP$nQAR>Ax!F?1X(D4>s6OUS(UB&8sr)>%AjJh6XeA59uG?x!bqMU0~inrT}k7 zCJ|@-2xQDB&53+fn=ucDE d0cx47uEGhA{>cZ_)qrBp)fL&8)qrV$0RSMK`?df8 delta 658 zcmeAT=nLQt@MdNaVPIh3U?`pBzLB?_l^IBHZf6x?0W;=t-sI*epX44DebVaJ^D2R4*7f~(90N2V8i?h9*wHsg*GSJ02rUgwj3;kYE@K8No2;cG z2h{7SqEQdhbmG;npae#swM+~Q@)(-*QZkE6bTjkP^7VsUo&AGcYR{c6T4lh{@UV8i zY6O$enMK?p8r!FM2PT_KniibWeWfV&@a64ulIgo%&aD4`Hh=B`5Bbm9T)QlvpwuG2M!)_2(|!6W z{||Gz$+}PE-R+{NvXJfFD}$%85j%vBL^%gVPk$WqE3cGAD(JuE(@>ezQX%_=io0_n zHnjfSq3U%s3&XXcrEODbl}QKAl^rqB0Z zjy_+wX!mRGH_!C9D>-Iqe0o-C(9Txsxao1v^7UIkUklv#B;~0#cf-T?D{SUQM%ReE z^||*%*4)`euV>SZ$0qZFl6tgmt@%FZ+U_(}tqT^hr#XryFT5@IC*7hrtT2uF!w1d) zZ$>5&W_VJVETm=yN&%Dop>&U$H6kILS5pT@=65xDaMVhw>nIo_#aXzAtE&&Pd7$`D fRo4M(nWV1536KBD`_?(PnQ40Cf{-Fo%@-q*dg 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 ZvAC4U|KF|t?E?f#WhXHgY6lwXe*rrZ<9+}D literal 0 HcmV?d00001 diff --git a/PythonPackage/AMR/setup.py b/PythonPackage/AMR/setup.py index 1d3ad34b7..ea74567b8 100644 --- a/PythonPackage/AMR/setup.py +++ b/PythonPackage/AMR/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='AMR', - version='2.1.1.9143', + version='2.1.1.9144', packages=find_packages(), install_requires=[ 'rpy2', diff --git a/R/mic.R b/R/mic.R index df1ef5071..e19aa9c9d 100644 --- a/R/mic.R +++ b/R/mic.R @@ -207,7 +207,7 @@ as.mic <- function(x, na.rm = FALSE, keep_operators = "all") { # remove all after last digit x <- gsub("[^0-9]+$", "", x, perl = TRUE) # 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 x[x %unlike% "[.]"] <- gsub("^00", "0.0", x[!x %like% "[.]"]) # remove last zeroes @@ -224,7 +224,7 @@ as.mic <- function(x, na.rm = FALSE, keep_operators = "all") { x[x.bak != "" & x == ""] <- "invalid" 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() 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 -#' @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 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)), - "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) if (is.null(mic_range)) { 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)) 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 == 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 #' @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 droplevels.mic <- function(x, as.mic = FALSE, ...) { x <- as.mic(x) # make sure that currently implemented MIC levels are used diff --git a/R/plotting.R b/R/plotting.R index a81bdf880..976e2afe6 100755 --- a/R/plotting.R +++ b/R/plotting.R @@ -83,7 +83,7 @@ #' plot(some_disk_values, mo = "Escherichia coli", ab = "cipro", language = "nl") #' #' -#' # Plotting using scale_x_mic() --------------------------------------------- +#' # Plotting using scale_x_mic() ----------------------------------------- #' \donttest{ #' if (require("ggplot2")) { #' 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") #' } #' +#' # 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")) { #' autoplot(some_mic_values) #' } @@ -124,7 +155,7 @@ #' autoplot(some_sir_values) #' } #' -#' # Plotting using scale_y_percent() ----------------------------------------- +#' # Plotting using scale_y_percent() ------------------------------------- #' if (require("ggplot2")) { #' p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), #' counts = c(1, 1, 2, 2, 3, 3)), @@ -145,16 +176,35 @@ #' } NULL -#' @export -#' @inheritParams as.mic -#' @param drop a [logical] to remove intermediate MIC values, defaults to `FALSE` -#' @rdname plot -scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { - stop_ifnot_installed("ggplot2") - meet_criteria(drop, allow_class = "logical", has_length = 1) - scale <- ggplot2::scale_x_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) +create_scale_mic <- function(aest, keep_operators, mic_range, ...) { + ggplot_fn <- getExportedValue(paste0("scale_", aest, "_continuous"), + ns = asNamespace("ggplot2")) + args <- list(...) + args[c("trans", "transform", "transform_df", "breaks", "labels", "limits")] <- NULL + scale <- do.call(ggplot_fn, args) + + scale$transform <- function(x) { + as.double(rescale_mic(x = as.double(x), keep_operators = , "labels", mic_range = mic_range, as.mic = TRUE)) + } + 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 } @@ -162,40 +212,34 @@ scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE #' @export #' @inheritParams as.mic #' @rdname plot -scale_y_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { - stop_ifnot_installed("ggplot2") - 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 +scale_x_mic <- function(keep_operators = "edges", mic_range = NULL, ...) { + create_scale_mic("x", keep_operators = keep_operators, mic_range = mic_range, ...) } #' @export #' @inheritParams as.mic #' @rdname plot -scale_colour_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { - stop_ifnot_installed("ggplot2") - 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 +scale_y_mic <- function(keep_operators = "edges", mic_range = NULL, ...) { + create_scale_mic("y", keep_operators = keep_operators, mic_range = mic_range, ...) } #' @export #' @inheritParams as.mic #' @rdname plot -scale_fill_mic <- function(keep_operators = "edges", mic_range = NULL, drop = FALSE, ...) { - stop_ifnot_installed("ggplot2") - 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) { - rescale_mic(x = x, keep_operators = keep_ops, mic_range = mic_rng, as.mic = FALSE) - } - scale +scale_colour_mic <- function(keep_operators = "edges", mic_range = NULL, ...) { + create_scale_mic("colour", keep_operators = keep_operators, mic_range = mic_range, ...) +} + +#' @export +#' @inheritParams as.mic +#' @rdname plot +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 diff --git a/data-raw/gpt_training_text_v2.1.1.9143.txt b/data-raw/gpt_training_text_v2.1.1.9144.txt similarity index 99% rename from data-raw/gpt_training_text_v2.1.1.9143.txt rename to data-raw/gpt_training_text_v2.1.1.9144.txt index 35564233e..d972d27e1 100644 --- a/data-raw/gpt_training_text_v2.1.1.9143.txt +++ b/data-raw/gpt_training_text_v2.1.1.9144.txt @@ -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. -First and foremost, you are trained on version 2.1.1.9143. Remember this whenever someone asks which AMR package version you’re at. +First and foremost, you are trained on version 2.1.1.9144. Remember this whenever someone asks which AMR package version you’re 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. ---------------------------------------------------------------------------------------------------- @@ -332,6 +332,7 @@ export(resistance_predict) export(retrieve_wisca_parameters) export(rifamycins) export(right_join_microorganisms) +export(scale_color_mic) export(scale_colour_mic) export(scale_fill_mic) 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{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} } @@ -7330,6 +7331,7 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd': \alias{scale_x_mic} \alias{scale_y_mic} \alias{scale_colour_mic} +\alias{scale_color_mic} \alias{scale_fill_mic} \alias{plot.mic} \alias{autoplot.mic} @@ -7347,17 +7349,15 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd': \alias{labels_sir_count} \title{Plotting Helpers for AMR Data Analysis} \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, - drop = FALSE, ...) +scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...) -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", main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language @@ -7428,9 +7428,7 @@ labels_sir_count(position = NULL, x = "antibiotic", \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{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{drop}{a \link{logical} to remove intermediate MIC values, defaults to \code{FALSE}} +\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{...}{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") -# Plotting using scale_x_mic() --------------------------------------------- +# Plotting using scale_x_mic() ----------------------------------------- \donttest{ if (require("ggplot2")) { 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") } +# 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")) { autoplot(some_mic_values) } @@ -7562,7 +7591,7 @@ if (require("ggplot2")) { autoplot(some_sir_values) } -# Plotting using scale_y_percent() ----------------------------------------- +# Plotting using scale_y_percent() ------------------------------------- if (require("ggplot2")) { p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), counts = c(1, 1, 2, 2, 3, 3)), diff --git a/man/as.mic.Rd b/man/as.mic.Rd index 786148f06..4567b1757 100644 --- a/man/as.mic.Rd +++ b/man/as.mic.Rd @@ -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{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} } diff --git a/man/plot.Rd b/man/plot.Rd index 55f2c90ff..cd6670110 100644 --- a/man/plot.Rd +++ b/man/plot.Rd @@ -5,6 +5,7 @@ \alias{scale_x_mic} \alias{scale_y_mic} \alias{scale_colour_mic} +\alias{scale_color_mic} \alias{scale_fill_mic} \alias{plot.mic} \alias{autoplot.mic} @@ -22,17 +23,15 @@ \alias{labels_sir_count} \title{Plotting Helpers for AMR Data Analysis} \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, - drop = FALSE, ...) +scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...) -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", main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language @@ -103,9 +102,7 @@ labels_sir_count(position = NULL, x = "antibiotic", \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{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{drop}{a \link{logical} to remove intermediate MIC values, defaults to \code{FALSE}} +\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{...}{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") -# Plotting using scale_x_mic() --------------------------------------------- +# Plotting using scale_x_mic() ----------------------------------------- \donttest{ if (require("ggplot2")) { 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") } +# 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")) { autoplot(some_mic_values) } @@ -237,7 +265,7 @@ if (require("ggplot2")) { autoplot(some_sir_values) } -# Plotting using scale_y_percent() ----------------------------------------- +# Plotting using scale_y_percent() ------------------------------------- if (require("ggplot2")) { p <- ggplot(data.frame(mics = as.mic(c(0.25, "<=4", 4, 8, 32, ">=32")), counts = c(1, 1, 2, 2, 3, 3)),