From 49c6e94c3ae447beffe8500d7eab85c253bd07de Mon Sep 17 00:00:00 2001 From: gmillot <gael.millot@pasteur.fr> Date: Mon, 4 May 2020 09:49:15 +0200 Subject: [PATCH] fun_gg_scatter() empty legend space improved but still errors to fix, fun_gg_boxplot() -> incorporation of legend space still in progress --- cute_little_R_functions.R | 3180 +++++++++++++++++++++++++++++++++++++ fun_gg_boxplot.docx | Bin 102347 -> 102130 bytes scatter.docx | Bin 101017 -> 100619 bytes 3 files changed, 3180 insertions(+) diff --git a/cute_little_R_functions.R b/cute_little_R_functions.R index 69342cb..8aa57d9 100644 --- a/cute_little_R_functions.R +++ b/cute_little_R_functions.R @@ -6977,3 +6977,3183 @@ return(output) # do not use cat() because the idea is to reuse the message + + + +# add legend width from scatter. Ok with facet? +# transfert the 2nd tick part to scatter +# improve grid -> put secondary grids. Then trasfert to scatter +# replace .categ.legend.name by box.legend.name +# replace dot.categ.legend.name by dot.legend.name + +fun_gg_boxplot <- function( +data1, +y, +categ, +categ.class.order = NULL, +categ.legend.name = NULL, +categ.color = NULL, +box.fill = FALSE, +box.width = 0.5, +box.space = 0.1, +box.line.size = 0.5, +box.notch = FALSE, +box.alpha = 1, +box.mean = TRUE, +box.whisker.kind = "std", +box.whisker.width = 0, +dot.color = "black", +dot.categ = NULL, +dot.categ.class.order = NULL, +dot.categ.legend.name = NULL, +dot.tidy = FALSE, +dot.tidy.bin.nb = 50, +dot.jitter = 0.5, +dot.size = 3, +dot.alpha = 0.5, +dot.border.size = 0.5, +dot.border.color = NULL, +x.lab = NULL, +y.lab = NULL, +y.lim = NULL, +y.log = "no", +y.tick.nb = NULL, +y.inter.tick.nb = NULL, +y.include.zero = FALSE, +y.top.extra.margin = 0.05, +y.bottom.extra.margin = 0.05, +stat.disp = NULL, +stat.disp.mean = FALSE, +stat.size = 4, +stat.dist = 2, +vertical = TRUE, +text.size = 12, +text.angle = 0, +title = "", +title.text.size = 8, +legend.show = TRUE, +legend.width = 0.5, +article = TRUE, +grid = FALSE, +return = FALSE, +return.ggplot = FALSE, +plot = TRUE, +add = NULL, +warn.print = FALSE, +lib.path = NULL +){ +# AIM +# ggplot2 boxplot with the possibility to add background or foreground dots +# for ggplot2 specifications, see: https://ggplot2.tidyverse.org/articles/ggplot2-specs.html +# WARNINGS +# Rows containing NA in data1[, c(y, categ)] will be removed before processing, with a warning (see below) +# Hinges are not computed like in the classical boxplot() function of R +# To have a single box, create a factor column with a single class and specify the name of this column in the categ argument. For a single set of grouped boxs, create a factor column with a single class and specify this column in categ argument as first element (i.e., as categ1, knowing that categ2 must also be specified in this situation). See categ below +# with separated boxs (categ argument with only one element), box.width argument defines each box width. The box.width argument also defines the space between boxs by using (1 - box.width). In addition, xmin and xmax of the fun_gg_boxplot() output report the box boundaries (around x-axis unit 1, 2, 3, etc., for each box) +# with grouped boxs (categ argument with two elements), box.width argument defines each set of grouped box width. The box.width argument also defines the space between set of grouped boxs by using (1 - box.width). In addition, xmin and xmax of the fun_gg_boxplot() output report the box boundaries (around x-axis unit 1, 2, 3, etc., for each set of grouped box) +# The dot.alpha argument can alter the display of the color boxes when using pdf output +# ARGUMENTS +# data1: dataframe containing one column of values (see y argument below) and one or two columns of categories (see categ argument below). Duplicated column names are not allowed +# y: character string of the data1 column name for y-axis (column containing numeric values). Numeric values will be split according to the classes of the column names indicated in the categ argument to generate the boxs and will also be used to plot the dots +# categ: vector of character strings of the data1 column name for categories (column of characters or factor). Must be either one or two column names. If a single column name (further refered to as categ1), then one box per class of categ1. If two column names (further refered to as categ1 and categ2), then one box per class of categ2, which form a group of boxs in each class of categ1. BEWARE: no empty classes allowed. To have a single box, create a factor column with a single class and specify the name of this column in the categ argument (here, no categ2 in categ argument). For a single set of grouped boxs, create a factor column with a single class and specify this column in categ argument as first element (i.e., as categ1, knowing that categ2 must also be specified in this situation) +# categ.class.order: list indicating the order of the classes of categ1 and categ2 represented on the boxplot (the first compartment for categ1 and and the second for categ2). If categ.class.order == NULL, classes are represented according to the alphabetical order. Some compartment can be NULL and other not +# categ.legend.name: character string of the legend title for categ2. If categ.legend.name == NULL, then categ.legend.name <- categ1 if only categ1 is present, and categ.legend.name <- categ2 if categ1 and categ2 are present. Write "" if no legend required +# categ.color: vector of color character string for box frame +#If categ.color == NULL, default colors of ggplot2, whatever categ1 and categ2 +# If categ.color is non null and only categ1 in categ argument, categ.color can be either: (1) a single color string (all the boxs will have this color, whatever the number of classes of categ1), (2) a vector of string colors, one for each class of categ1 (each color will be associated according to categ.class.order of categ1), (3) a vector or factor of string colors, like if it was one of the column of data1 data frame (beware: a single color per class of categ1 and a single class of categ1 per color must be respected). Integers are also accepted instead of character strings, as long as above rules about length are respected. Integers will be processed by fun_gg_palette() using the max integer value among all the integers in categ.color +# If categ.color is non null and categ1 and categ2 specified, all the rules described above will apply to categ2 instead of categ1 (colors will be determined for boxs inside a group of boxs) +# box.fill: logical. Fill the box? If TRUE, the categ.color argument will be used to generate filled boxplot (the box frames being black) as well as filled outlier dots (the dot border being controled by the dot.border.color argument) and if all the dots are plotted (argument dot.color other than NULL), they will be over the boxes. If FALSE, the categ.color argument will be used to color the box frames and the outlier dot borders, and if all the dots are plotted, they will be beneath the boxes +# box.width: numeric value (from 0 to 1) of the box or set of grouped box width (see warnings above) +# box.space: numeric value (from 0 to 1) indicating the box separation in grouped boxes. 0 means no space and 1 means boxes shrinked to a vertical line. Ignored if no grouped boxes +# box.line.size: numeric value of line size of boxes and whiskers (in mm) +# box.notch: logical. Notched boxplot? It TRUE, display notched boxplot, the notches corresponding approximately to the 95% confidence interval of the median (the notch interval is exactly 1.58 x Inter Quartile Range (IQR) / sqrt(n), with n the number of values that made the box). If notch intervals between two boxes do not overlap, it can be interpreted as significant median differences +# box.alpha: numeric value (from 0 to 1) of box transparency (full transparent to full opaque, respectively). BEWARE: work only for the fill of boxplots, not for the frame. See https://github.com/tidyverse/ggplot2/issues/252 +# box.mean: logical. Add mean value? It TRUE, a losange dot, additional to the solid median bar and corresponding to the mean value, is incorporated into each boxplot +# box.whisker.kind: range of the whiskers. Either "no" (no whiskers), or "std" (length of each whisker equal to 1.5 x Inter Quartile Range (IQR)), or "max" (length of the whiskers up or down to the most distant dot) +# box.whisker.width: numeric value (from 0 to 1) of the whisker width, with 0 meaning no whiskers and 1 meaning a width equal to the corresponding boxplot width +# dot.color: vector of color character string for color of dots. +# If NULL, no dots plotted +# If "same", the dots will have the same colors as the respective boxplots +# Otherwise, colors will depend on the dot.categ argument. If dot.categ is NULL, then colors will be applied to each class of the last column name specified in categ. If dot.categ is non NULL, colors will be applied to each class of the column name specified in dot.categ. Color strings can be (1), (2) or (3) of categ.color argument, except that in the possibility (3), the rule "a single color per class of categ and a single class of categ per color", does not have to be respected (for instance, each dot can have a different color). See examples Put in example or leave here? -> Example: with categ = "Group1", dot.color = "red" and dot.categ = NULL, all the dots will be red, whatever the classes in Group1 column of data1, and no legend will be display for dots. With categ = c("Group1", "Group2"), dot.color = c("red", "blue") and dot.categ = NULL, the dots will be red for first class of Group2 and blue for the 2nd class of Group2, and no legend will be display for dots. With categ = c("Group1", "Group2"), dot.color = c("red", "blue") and dot.categ = "Group1", the dots will be red for first class of Group1 and blue for the 2nd class of Group1, and a legend will be display for dots +# dot.categ: optional single character string of a data1 column name (further refered to as categ3), which is associated to the dot.color argument to generate a legend for dots. If non NULL, then a legend will be created for the dots, in addition to the legend for the boxes. If NULL, no legend created and the colors of dot will depend on dot.color and categ arguments (see the explanation in dot.color) +# dot.categ.class.order: optional vector of character strings indicating the order of the classes of categ3. If dot.categ is non NULL and dot.categ.class.order is NULL, classes are displayed in the legend according to the alphabetical order. Ignored if dot.categ is NULL +# dot.categ.legend.name: optional character string of the legend title for categ3. If dot.categ.legend.name == NULL, categ3 value is used (name of the column in data1). Write "" if no legend required. Ignored if dot.categ is NULL +# dot.tidy: logical. Nice dot spreading? If TRUE, use the geom_dotplot() function for a nice representation. BEWARE: change the true coordinates of dots that are aligned. Thus the gain in aestheticism is associated with a loss in precision that can be very important. If FALSE, dots are randomly spread, using the dot.jitter argument (see below) keeping the true dot coordinates +# dot.tidy.bin.nb: positive integer indicating the number of bins (i.e., nb of separations) of the y.lim range. Each dot will then be put in one of the bin, with the size the width of the bin. In other words, increase the number to have smaller dots. Not considered if dot.tidy is FALSE +# dot.jitter: numeric value (from 0 to 1) of random dot horizontal dispersion, with 0 meaning no dispersion and 1 meaning a dispersion in the corresponding box width interval. Not considered if dot.tidy is TRUE +# dot.size: numeric value of dot size (in mm). Not considered if dot.tidy is TRUE +# dot.alpha: numeric value (from 0 to 1) of dot transparency (full transparent to full opaque, respectively) +# dot.border.size: numeric value of border dot size (in mm). Write zero for no dot border. If dot.tidy is TRUE, value 0 remove the border. Another one leave the border without size control (geom_doplot() feature) +# dot.border.color: single character color string defining the color of the dot border (same color for all the dots, whatever their categories). If dot.border.color == NULL, the border color will be the same as the dot color. A single integer is also accepted instead of a character string, that will be processed by fun_gg_palette() +# x.lab: a character string or expression for x-axis legend. If NULL, character string of categ1 +# y.lab: a character string or expression for y-axis legend. If NULL, character string of the y argument +# y.lim: 2 numeric values indicating the range of the y-axis +# y.log: either "no" (values in the y argument column of the data1 data frame are not log), "log2" (values in the y argument column of the data1 data frame are log2 transformed) or "log10" (values in the y argument column of the data1 data frame are log10 transformed). BEWARE: do not transform the data, but just display ticks in a log scale manner. Thus, negative or zero values allowed in the y argument when y.log is "log2" or "log10". BEWARE: not possible to have horizontal boxs with a log axis, due to a bug in ggplot2 (see https://github.com/tidyverse/ggplot2/issues/881) +# y.tick.nb: approximate number of desired label values (i.e., main ticks) on the y-axis (n argument of the the cute::fun_scale() function). BEWARE: provide this number even if y.log is "log2" or "log10", which can be difficult to read (e.g., ..., 2^2, 2^2.5, 2^3, ...). If NULL and if y.log is "no", then the number of label values is set by ggplot2. If NULL and if y.log is "log2" or "log10", then the number of label values correspond to integer units between y.lim (e.g., ..., 2^1, 2^2, 2^3, ...) +# y.inter.tick.nb: number of desired secondary ticks between main ticks. Ignored if y.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$y.inter.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks +# y.include.zero: logical. Does y.lim range include 0? Ok even if y.log == TRUE because y.lim must already be log transformed values +# y.top.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to y.lim. If different from 0, add the range of the axis * y.top.extra.margin (e.g., abs(y.lim[2] - y.lim[1]) * y.top.extra.margin) to the top of y-axis +# y.bottom.extra.margin: idem as y.top.extra.margin but to the bottom of y-axis +# stat.disp: add the median number above the corresponding box. Either NULL (no number shown), "top" (at the top of the figure region) or "above" (above each box) +# stat.disp.mean: logical. Diplay means instead of medians ? +# stat.size: numeric value of the stat size (in points). Increase the value to increase text size +# stat.dist: numeric value of the stat distance. Increase the value to increase the distance from the box plot +# vertical: logical. Vertical boxs? BEWARE: will be automatically set to TRUE if y.log argument is other than "no". Indeed, not possible to have horizontal boxs with a log axis, due to a bug in ggplot2 (see https://github.com/tidyverse/ggplot2/issues/881) +# text.size: numeric value of the size of the (1) axis numbers and axis legends, (2) texts in the graphic legend, (3) stats above boxs (in points) +# text.angle: integer value of the text angle for the x-axis labels. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc. +# title: character string of the graph title +# title.text.size: numeric value of the title size (in points) +# legend.show: logical. Show legend? Not considered if categ argument is NULL, because this already generate no legend, excepted if legend.width argument is non NULL. In that specific case (categ is NULL, legend.show is TRUE and legend.width is non NULL), an empty legend space is created. This can be useful when desiring graphs of exactly the same width, whatever they have legends or not +# legend.width: single proportion (between 0 and 1) indicating the relative width of the legend sector (on the right of the plot) relative to the width of the plot. Value 1 means that the window device width is split in 2, half for the plot and half for the legend. Value 0 means no room for the legend which will overlay the plot region. Write NULL to inactivate the legend sector. In such case, ggplot2 will manage the room required for the legend display, meaning that the width of the plotting region can vary between graphs, depending on the text in the legend +# article: logical. If TRUE, use a article theme (article like). If FALSE, use a classic related ggplot theme. Use the add argument (add = "+ggplot2::theme_classic()" for the exact classic ggplot theme +# grid: logical. Draw horizontal lines in the background to better read the box values? Not considered if article == FALSE +# return: logical. Return the graph parameters? +# return.ggplot: logical. Return the ggplot object in the output list? Ignored if return is FALSE. See $ggplot in the RETURN section below for more details +# plot: logical. Plot the graphic? If FALSE and return argument is TRUE, graphical parameters and associated warnings are provided without plotting +# add: character string allowing to add more ggplot2 features (dots, lines, themes, facet, etc.). Ignored if NULL +# BEWARE: (1) the string must start with "+", (2) the string must finish with ")" and (3) each function must be preceded by "ggplot2::". Example: "+ ggplot2::coord_flip() + ggplot2::theme_bw()" +# If the character string contains the "ggplot2::theme" string, then the article argument of fun_gg_boxplot() (see above) is ignored with a warning +# Handle the add argument with caution since added functions can create conflicts with the preexisting internal ggplot2 functions +# warn.print: logical. Print warnings at the end of the execution? ? If FALSE, warning messages are never printed, but can still be recovered in the returned list. Some of the warning messages (those delivered by the internal ggplot2 functions) are not apparent when using the argument plot = FALSE +# lib.path: character string indicating the absolute path of the required packages (see below). if NULL, the function will use the R library default folders +# REQUIRED PACKAGES +# ggplot2 +# scales +# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION +# fun_check() +# fun_comp_1d() +# fun_comp_2d() +# fun_gg_just() +# fun_gg_palette() +# fun_inter_ticks() +# fun_name_change() +# fun_pack() +# fun_round() +# fun_scale() +# RETURN +# a boxplot if plot argument is TRUE +# a list of the graph info if return argument is TRUE: +# $data: the initial data +# $stat: the graphic statistics +# $removed.row.nb: which rows have been removed due to NA detection in y and categ columns (NULL if no row removed) +# $removed.rows: removed rows containing NA (NULL if no row removed) +# $plot: the graphic box and dot coordinates +# $dots: dot coordinates +# $main.box: coordinates of boxes +# $median: median coordinates +# $sup.whisker: coordinates of top whiskers (y for base and y.end for extremities) +# $inf.whisker: coordinates of bottom whiskers (y for base and y.end for extremities) +# $sup.whisker.edge: coordinates of top whisker edges (x and xend) +# $inf.whisker.edge: coordinates of bottom whisker edges(x and xend) +# $mean: diamon mean coordinates (only if box.mean argument is TRUE) +# $stat.display.positive: coordinates of stat numbers when positive (only if stat.disp argument is TRUE) +# $stat.display.negative: coordinates of stat numbers when negative (only if stat.disp argument is TRUE) +# y.inter.tick.positions: coordinates of secondary ticks (only if y.inter.tick.nb argument is non NULL or if y.log argument is different from "no") +# y.inter.tick.values: values of secondary ticks. NULL except if y.inter.tick.nb argument is non NULL or if y.log argument is different from "no") +# $panel: the variable names used for the panels (NULL if no panels). BEWARE: NA can be present according to ggplot2 upgrade to v3.3.0 +# $axes: the x-axis and y-axis info +# $warn: the warning messages. Use cat() for proper display. NULL if no warning. BEWARE: some of the warning messages (those delivered by the internal ggplot2 functions) are not apparent when using the argument plot = FALSE +# $ggplot: ggplot object that can be used for reprint (use print($ggplot) or update (use $ggplot + ggplot2::...). NULL if return.ggplot argument is FALSE. Indeed, a non NULL $ggplot in the output list is sometimes annoying as the manipulation of the list print the plot +# EXAMPLE +# obs1 <- data.frame(x = 1:20, Group1 = rep(c("G", "H"), times = 10), Group2 = rep(c("A", "B"), each = 10)) ; fun_gg_boxplot(data1 = obs1, y = "x", categ = c("Group1", "Group2"), categ.class.order = list(NULL, c("B", "A")), categ.legend.name = "", categ.color = c("red", "blue"),box.fill = FALSE, box.width = 0.5, box.space = 0.1, box.line.size = 0.5, box.notch = FALSE, box.alpha = 1, box.mean = TRUE, box.whisker.kind = "std", box.whisker.width = 0, dot.color = "black", dot.categ = NULL, dot.categ.class.order = NULL, dot.categ.legend.name = NULL, dot.tidy = TRUE, dot.tidy.bin.nb = 50, dot.jitter = 0.5, dot.size = 3, dot.alpha = 0.5, dot.border.size = 0.5, dot.border.color = NULL, x.lab = NULL, y.lab = NULL, y.lim = NULL, y.log = "no", y.tick.nb = NULL, y.inter.tick.nb = NULL, y.include.zero = FALSE, y.top.extra.margin = 0.05, y.bottom.extra.margin = 0.05, stat.disp = NULL, stat.disp.mean = FALSE, stat.size = 4, stat.dist = 2, vertical = TRUE, text.size = 12, text.angle = 0, title = "", title.text.size = 8, legend.width = 0.5, article = TRUE, grid = FALSE, return = FALSE, return.ggplot = FALSE, plot = TRUE, add = NULL, warn.print = TRUE, lib.path = NULL) +# DEBUGGING +# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Group1 = rep(c("G", "H"), each = 10)) ; set.seed(NULL) ; obs1$Time[1:10] <- NA ; data1 = obs1 ; y = "Time" ; categ = c("Group1") ; categ.class.order = NULL ; categ.legend.name = NULL ; categ.color = c("green") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = FALSE ; box.line.size = 0.5 ; box.alpha = 0.5 ; box.mean = TRUE ; box.whisker.kind = "std" ; box.whisker.width = 0.5 ; dot.color = "black" ; dot.categ = "Group1"; dot.categ.class.order = c("G", "H") ; dot.categ.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 50 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "no" ; y.tick.nb = NULL ; y.inter.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = NULL ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.width = 0.5 ; text.angle = 0 ; article = FALSE ; grid = FALSE ; return = TRUE ; return.ggplot = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL +# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Group1 = rep(c("G", "H"), each = 10), Group2 = rep(c("A", "B"), time = 10), Group3 = rep(c("I", "J"), time = 10)) ; set.seed(NULL) ; obs1$Time[1:10] <- NA ; data1 = obs1 ; y = "Time" ; categ = c("Group1", "Group2") ; categ.class.order = list(c("G", "H"), c("A", "B")); categ.legend.name = NULL ; categ.color = c("green", "blue") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = FALSE ; box.line.size = 0.5 ; box.alpha = 0.5 ; box.mean = TRUE ; box.whisker.kind = "std" ; box.whisker.width = 0.5 ; dot.color = "black" ; dot.categ = "Group1" ; dot.categ.class.order = NULL ; dot.categ.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 30 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "no" ; y.tick.nb = NULL ; y.inter.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = NULL ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.width = 0.5 ; text.angle = 0 ; article = FALSE ; grid = FALSE ; return = FALSE ; return.ggplot = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL +# set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Group1 = rep(c("G", "H"), each = 10), Group2 = rep(c("A", "B"), time = 10)) ; set.seed(NULL) ; data1 = obs1 ; y = "Time" ; categ = c("Group1") ; categ.class.order = list(c("H", "G")); categ.legend.name = NULL ; categ.color = c("blue") ; box.fill = FALSE ; box.width = 0.5 ; box.space = 0.1 ; box.notch = TRUE ; box.line.size = 1 ; box.alpha = 1 ; box.mean = FALSE ; box.whisker.kind = "max" ; box.whisker.width = 0 ; dot.color = "black" ; dot.categ = "Group1" ; dot.categ.class.order = NULL ; dot.categ.legend.name = NULL ; dot.tidy = TRUE ; dot.tidy.bin.nb = 30 ; dot.jitter = 0.25 ; dot.size = 3 ; dot.alpha = 0.5 ; dot.border.size = 0.5 ; dot.border.color = NULL ; y.lim = NULL ; y.log = "log10" ; y.tick.nb = NULL ; y.inter.tick.nb = NULL ; y.include.zero = FALSE ; y.top.extra.margin = 0.05 ; y.bottom.extra.margin = 0.05 ; stat.disp = NULL ; stat.disp.mean = FALSE ; stat.size = 4 ; stat.dist = 2 ; x.lab = NULL ; y.lab = NULL ; vertical = TRUE ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.width = 0.5 ; text.angle = 0 ; article = FALSE ; grid = FALSE ; return = FALSE ; return.ggplot = FALSE ; plot = TRUE ; add = NULL ; warn.print = FALSE ; lib.path = NULL +# function name +function.name <- paste0(as.list(match.call(expand.dots=FALSE))[[1]], "()") +# end function name +# required function checking +req.function <- c( +"fun_comp_2d", +"fun_gg_just", +"fun_gg_palette", +"fun_name_change", +"fun_pack", +"fun_check", +"fun_round", +"fun_scale", +"fun_inter_ticks" +) +for(i1 in req.function){ +if(length(find(i1, mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, "\nREQUIRED ", i1, "() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +} +# end required function checking +# reserved words to avoid bugs (names of dataframe columns used in this function) +reserved.words <- c("categ.check", "categ.color", "dot.color", "dot.categ", "dot.max", "dot.min", "group", "PANEL", "group.check", "MEAN", "tempo.categ1", "tempo.categ2", "text.max.pos", "text.min.pos", "x", "x.y", "y", "y.check", "y_from.dot.max", "ymax", "tidy_group") +# end reserved words to avoid bugs (used in this function) +# argument primary checking +arg.check <- NULL # +text.check <- NULL # +checked.arg.names <- NULL # for function debbuging: used by r_debugging_tools +ee <- expression(arg.check <- c(arg.check, tempo$problem) , text.check <- c(text.check, tempo$text) , checked.arg.names <- c(checked.arg.names, tempo$fun.name)) +tempo <- fun_check(data = data1, class = "data.frame", na.contain = TRUE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = categ, class = "vector", mode = "character", fun.name = function.name) ; eval(ee) +if( ! is.null(categ.class.order)){ +tempo <- fun_check(data = categ.class.order, class = "list", fun.name = function.name) ; eval(ee) +} +if( ! is.null(categ.legend.name)){ +tempo <- fun_check(data = categ.legend.name, class = "vector", mode = "character", fun.name = function.name) ; eval(ee) +} +if( ! is.null(categ.color)){ +tempo1 <- fun_check(data = categ.color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = categ.color, class = "factor", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.check.color <- fun_check(data = categ.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name, print = FALSE)$problem +if(tempo.check.color == TRUE){ +tempo.cat <- paste0("categ.color ARGUMENT MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR") # integer possible because dealt above +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +} +tempo <- fun_check(data = box.fill, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.space, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.line.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.notch, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.alpha, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.mean, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.whisker.kind, options = c("no", "std", "max"), length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = box.whisker.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(dot.color)){ +tempo1 <- fun_check(data = dot.color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = dot.color, class = "factor", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.check.color <- fun_check(data = dot.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name, print = FALSE)$problem +if(tempo.check.color == TRUE){ +tempo.cat <- paste0("dot.color MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR") # integer possible because dealt above +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +} +if( ! is.null(dot.categ)){ +tempo <- fun_check(data = dot.categ, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +if( ! is.null(dot.categ.class.order)){ +tempo <- fun_check(data = dot.categ.class.order, class = "vector", mode = "character", fun.name = function.name) ; eval(ee) +} +if( ! is.null(dot.categ.legend.name)){ +tempo <- fun_check(data = dot.categ.legend.name, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = dot.tidy, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = dot.tidy.bin.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = dot.jitter, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = dot.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = dot.alpha, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = dot.border.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +if( ! is.null(dot.border.color)){ +tempo1 <- fun_check(data = dot.border.color, class = "vector", mode = "character", length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = dot.border.color, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +# integer colors into gg_palette +tempo.cat <- paste0("dot.border.color MUST BE A SINGLE CHARACTER STRING OF COLOR OR A SINGLE INTEGER VALUE") # integer possible because dealt above +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(x.lab)){ +if(all(class(x.lab) %in% "expression")){ # to deal with math symbols +tempo <- fun_check(data = x.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee) +}else{ +tempo <- fun_check(data = x.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +} +if( ! is.null(y.lab)){ +if(all(class(y.lab) %in% "expression")){ # to deal with math symbols +tempo <- fun_check(data = y.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee) +}else{ +tempo <- fun_check(data = y.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +} +if( ! is.null(y.lim)){ +tempo <- fun_check(data = y.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & any(y.lim %in% c(Inf, -Inf))){ +tempo.cat <- paste0("y.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo <- fun_check(data = y.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(y.tick.nb)){ +tempo <- fun_check(data = y.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & y.tick.nb < 0){ +tempo.cat <- paste0("y.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(y.inter.tick.nb)){ +tempo <- fun_check(data = y.inter.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & y.inter.tick.nb < 0){ +tempo.cat <- paste0("y.inter.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo <- fun_check(data = y.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y.top.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y.bottom.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(stat.disp)){ +tempo <- fun_check(data = stat.disp, options = c("top", "above"), length = 1, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = stat.disp.mean, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = stat.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = stat.dist, class = "vector", mode = "numeric", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = vertical, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = text.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = title, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = title.text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +if( ! is.null(legend.width)){ +tempo <- fun_check(data = legend.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = article, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = grid, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = return, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = return.ggplot, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = plot, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(add)){ +tempo <- fun_check(data = add, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & ! grepl(pattern = "^\\s*\\+", add)){ # check that the add string start by + +tempo.cat <- paste0("add ARGUMENT MUST START WITH \"+\": ", paste(unique(add), collapse = " ")) +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +}else if(tempo$problem == FALSE & ! grepl(pattern = "(ggplot2|lemon)\\s*::", add)){ # +tempo.cat <- paste0("FOR EASIER FUNCTION DETECTION, add ARGUMENT MUST CONTAIN \"ggplot2::\" OR \"lemon::\" IN FRONT OF EACH GGPLOT2 FUNCTION: ", paste(unique(add), collapse = " ")) +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +}else if(tempo$problem == FALSE & ! grepl(pattern = ")\\s*$", add)){ # check that the add string finished by ) +tempo.cat <- paste0("add ARGUMENT MUST FINISH BY \")\": ", paste(unique(add), collapse = " ")) +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo <- fun_check(data = warn.print, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(lib.path)){ +tempo <- fun_check(data = lib.path, class = "vector", mode = "character", fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE){ +if( ! all(dir.exists(lib.path))){ # separation to avoid the problem of tempo$problem == FALSE and lib.path == NA +tempo.cat <- paste0("DIRECTORY PATH INDICATED IN THE lib.path ARGUMENT DOES NOT EXISTS:\n", paste(lib.path, collapse = "\n")) +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +} +if(any(arg.check) == TRUE){ +stop(paste0("\n\n================\n\nERROR IN ", function.name, "\n", paste(text.check[arg.check], collapse = "\n"), "\n\n================\n\n"), call. = FALSE) # +} +# source("C:/Users/Gael/Documents/Git_versions_to_use/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_check_dev)) # activate this line and use the function (with no arguments left as NULL) to check arguments status and if they have been checked using fun_check() +# end argument primary checking +# second round of checking and data preparation +warn <- NULL +warn.count <- 0 +if(any(duplicated(names(data1)))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nDUPLICATED COLUMN NAMES OF data1 ARGUMENT NOT ALLOWED:\n", paste(names(data1)[duplicated(names(data1))], collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +if( ! (y %in% names(data1))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ny ARGUMENT MUST BE A COLUMN NAME OF data1") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +tempo <- fun_check(data = data1[, y], data.name = "y COLUMN OF data1", class = "vector", mode = "numeric", na.contain = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ny ARGUMENT MUST BE NUMERIC COLUMN IN data1") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +} +if(length(categ) > 2){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg ARGUMENT CANNOT HAVE MORE THAN 2 COLUMN NAMES OF data1") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if( ! all(categ %in% names(data1))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg ARGUMENT MUST BE COLUMN NAMES OF data1. HERE IT IS:\n", paste(categ, collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +# reserved word checking +if(any(names(data1) %in% reserved.words)){ +if(any(duplicated(names(data1)))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nDUPLICATED COLUMN NAMES OF data1 ARGUMENT NOT ALLOWED:\n", paste(names(data1)[duplicated(names(data1))], collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +if( ! is.null(dot.categ)){ +if(dot.categ %in% categ){ +reserved.words <- c(reserved.words, paste0(dot.categ, "_DOT")) # paste0(dot.categ, "_DOT") is added to the reserved words because in such situation, a new column will be added to data1 that is named paste0(dot.categ, "_DOT") +} +} +tempo.output <- fun_name_change(names(data1), reserved.words) +for(i2 in 1:length(tempo.output$ini)){ # a loop to be sure to take the good ones +names(data1)[names(data1) == tempo.output$ini[i2]] <- tempo.output$post[i2] +if(any(y == tempo.output$ini[i2])){ +y[y == tempo.output$ini[i2]] <- tempo.output$post[i2] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN y ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN y ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# BEWARE: names of y argument potentially replaced +if(any(categ == tempo.output$ini[i2])){ +categ[categ == tempo.output$ini[i2]] <- tempo.output$post[i2] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN categ ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN categ ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# BEWARE: names of categ argument potentially replaced +if( ! is.null(dot.categ)){ +if(any(dot.categ == tempo.output$ini[i2])){ +dot.categ[dot.categ == tempo.output$ini[i2]] <- tempo.output$post[i2] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN dot.categ ARGUMENT (COLUMN NAMES OF data1 ARGUMENT),\n", tempo.output$ini[i2], " HAS BEEN REPLACED BY ", tempo.output$post[i2], "\nBECAUSE RISK OF BUG AS SOME NAMES IN dot.categ ARGUMENT ARE RESERVED WORD USED BY THE ", function.name, " FUNCTION") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +# BEWARE: names of dot.categ argument potentially replaced +} +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") REGARDING COLUMN NAMES REPLACEMENT, THE NAMES\n", paste(tempo.output$ini, collapse = " "), "\nHAVE BEEN REPLACED BY\n", paste(tempo.output$post, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +if( ! (is.null(add) | is.null(tempo.output$ini))){ +if(grepl(x = add, pattern = paste(tempo.output$ini, collapse = "|"))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF COLUMN NAMES OF data1 IN THE add ARGUMENT STRING, THAT CORRESPOND TO RESERVED STRINGS FOR ", function.name, "\nCOLUMN NAMES HAVE TO BE CHANGED\nTHE PROBLEMATIC COLUMN NAMES ARE SOME OF THESE NAMES:\n", paste(tempo.output$ini, collapse = " "), "\nIN THE DATA FRAME OF data1 AND IN THE STRING OF add ARGUMENT, TRY TO REPLACE NAMES BY:\n", paste(tempo.output$post, collapse = " "), "\n\nFOR INFORMATION, THE RESERVED WORDS ARE:\n", paste(reserved.words, collapse = "\n")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +} +} +# end reserved word checking +# management of add containing facet +facet.categ <- NULL +if( ! is.null(add)){ +facet.check <- TRUE +tempo <- unlist(strsplit(x = add, split = "\\s*\\+\\s*(ggplot2|lemon)\\s*::\\s*")) # +tempo <- sub(x = tempo, pattern = "^facet_wrap", replacement = "ggplot2::facet_wrap") +tempo <- sub(x = tempo, pattern = "^facet_grid", replacement = "ggplot2::facet_grid") +tempo <- sub(x = tempo, pattern = "^facet_rep", replacement = "lemon::facet_rep") +if(any(grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap"))){ +tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_wrap|lemon::facet_rep_wrap")]))) +facet.categ <- names(tempo1$params$facets) +tempo.text <- "facet_wrap OR facet_rep_wrap" +facet.check <- FALSE +}else if(grepl(x = add, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")){ +tempo1 <- suppressWarnings(eval(parse(text = tempo[grepl(x = tempo, pattern = "ggplot2::facet_grid|lemon::facet_rep_grid")]))) +facet.categ <- c(names(tempo1$params$rows), names(tempo1$params$cols)) +tempo.text <- "facet_grid OR facet_rep_grid" +facet.check <- FALSE +} +if(facet.check == FALSE & ! all(facet.categ %in% names(data1))){ # BEWARE: all(facet.categ %in% names(data1)) is TRUE when facet.categ is NULL +tempo.cat <- paste0("ERROR IN ", function.name, "\nDETECTION OF \"", tempo.text, "\" STRING IN THE add ARGUMENT BUT PROBLEM OF VARIABLE DETECTION (COLUMN NAMES OF data1)\nTHE DETECTED VARIABLES ARE:\n", paste(facet.categ, collapse = " "), "\nTHE data1 COLUMN NAMES ARE:\n", paste(names(data1), collapse = " "), "\nPLEASE REWRITE THE add STRING AND RERUN") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +} +# end management of add containing facet +# conversion of categ columns in data1 into factors +for(i1 in 1:length(categ)){ +tempo1 <- fun_check(data = data1[, categ[i1]], data.name = paste0("categ NUMBER ", i1, " OF data1"), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = data1[, categ[i1]], data.name = paste0("categ NUMBER ", i1, " OF data1"), class = "factor", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, "\n", paste0("categ NUMBER ", i1, " OF data1"), " MUST BE A FACTOR OR CHARACTER VECTOR") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if(tempo1$problem == FALSE){ # character vector +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN categ NUMBER ", i1, " IN data1, THE CHARACTER COLUMN HAS BEEN CONVERTED TO FACTOR, WITH LEVELS ACCORDING TO THE ALPHABETICAL ORDER") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +data1[, categ[i1]] <- factor(data1[, categ[i1]]) # if already a factor, change nothing, if characters, levels according to alphabetical order +} +# OK: all the categ columns of data1 are factors from here +# end conversion of categ columns in data1 into factors +if( ! is.null(categ.class.order)){ +if(length(categ.class.order) != length(categ)){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.class.order ARGUMENT MUST BE A LIST OF LENGTH EQUAL TO LENGTH OF categ\nHERE IT IS LENGTH: ", length(categ.class.order), " VERSUS ", length(categ)) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +for(i3 in 1:length(categ.class.order)){ +if(is.null(categ.class.order[[i3]])){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE categ.class.order COMPARTMENT ", i3, " IS NULL. ALPHABETICAL ORDER WILL BE APPLIED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +data1[, categ[i3]] <- factor(as.character(data1[, categ[i3]])) # if already a factor, change nothing, if characters, levels according to alphabetical order +categ.class.order[[i3]] <- levels(data1[, categ[i3]]) # character vector that will be used later +}else{ +tempo <- fun_check(data = categ.class.order[[i3]], data.name = paste0("COMPARTMENT ", i3 , " OF categ.class.order ARGUMENT"), class = "vector", mode = "character", length = length(levels(data1[, categ[i3]])), fun.name = function.name) ; eval(ee) # length(data1[, categ[i1]) -> if data1[, categ[i1] was initially character vector, then conversion as factor after the NA removal, thus class number ok. If data1[, categ[i1] was initially factor, no modification after the NA removal, thus class number ok +} +if(any(duplicated(categ.class.order[[i3]]))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i3, " OF categ.class.order ARGUMENT CANNOT HAVE DUPLICATED CLASSES: ", paste(categ.class.order[[i3]], collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if( ! (all(categ.class.order[[i3]] %in% unique(data1[, categ[i3]])) & all(unique(data1[, categ[i3]]) %in% categ.class.order[[i3]]))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nCOMPARTMENT ", i3, " OF categ.class.order ARGUMENT MUST BE CLASSES OF ELEMENT ", i3, " OF categ ARGUMENT\nHERE IT IS:\n", paste(categ.class.order[[i3]], collapse = " "), "\nFOR COMPARTMENT ", i3, " OF categ.class.order AND IT IS:\n", paste(unique(data1[, categ[i3]]), collapse = " "), "\nFOR COLUMN ", categ[i3], " OF data1") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +data1[, categ[i3]] <- factor(data1[, categ[i3]], levels = categ.class.order[[i3]]) # reorder the factor + +} +names(categ.class.order)[i3] <- categ[i3] +} +} +}else{ +categ.class.order <- vector("list", length = length(categ)) +tempo.categ.class.order <- NULL +for(i2 in 1:length(categ.class.order)){ +categ.class.order[[i2]] <- levels(data1[, categ[i2]]) +names(categ.class.order)[i2] <- categ[i2] +tempo.categ.class.order <- c(tempo.categ.class.order, ifelse(i2 != 1, "\n", ""), categ.class.order[[i2]]) +} +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE categ.class.order SETTING IS NULL. ALPHABETICAL ORDER WILL BE APPLIED FOR BOX ORDERING:\n", paste(tempo.categ.class.order, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# categ.class.order not NULL anymore (list) +if(is.null(categ.legend.name)){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE categ.legend.name SETTING IS NULL. NAMES OF categ WILL BE USED: ", paste(categ, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +categ.legend.name <- categ[length(categ)] # if only categ1, then legend name of categ1, if length(categ) == 2, then legend name of categ2 +} +# categ.legend.name not NULL anymore (character string) +# management of categ.color +if( ! is.null(categ.color)){ +# check the nature of color +# integer colors into gg_palette +tempo.check.color <- fun_check(data = categ.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name, print = FALSE)$problem +if(tempo.check.color == FALSE){ +# convert integers into colors +categ.color <- fun_gg_palette(max(categ.color, na.rm = TRUE))[categ.color] +} +# end integer colors into gg_palette +if( ! (all(categ.color %in% colors() | grepl(pattern = "^#", categ.color)))){ # check that all strings of low.color start by # +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors(): ", paste(unique(categ.color), collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +if(any(is.na(categ.color))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT CONTAINS NA") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end check the nature of color +# check the length of color +categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2 +if(length(categ.color) == length(levels(data1[, categ[categ.len]]))){ # here length(categ.color) is equal to the different number of categ +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +data1 <- data.frame(data1, categ.color = data1[, categ[categ.len]]) +data1$categ.color <- factor(data1$categ.color, labels = categ.color) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", categ[categ.len], " OF categ ARGUMENT, THE FOLLOWING COLORS:\n", paste(categ.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(length(categ.color) == length(data1[, categ[categ.len]])){# here length(categ.color) is equal to nrow(data1) -> Modif to have length(categ.color) equal to the different number of categ (length(categ.color) == length(levels(data1[, categ[categ.len]]))) +data1 <- data.frame(data1, categ.color = categ.color) +tempo.check <- unique(data1[ , c(categ[categ.len], "categ.color")]) +if( ! (nrow(tempo.check) == length(unique(categ.color)) & nrow(tempo.check) == length(unique(data1[ , categ[categ.len]])))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT HAS THE LENGTH OF data1 ROW NUMBER\nBUT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF categ ", categ[categ.len], ":\n", paste(unique(mapply(FUN = "paste", data1[ ,categ[categ.len]], data1[ ,"categ.color"])), collapse = "\n")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +categ.color <- unique(data1$categ.color[order(data1[, categ[categ.len]])]) # Modif to have length(categ.color) equal to the different number of categ (length(categ.color) == length(levels(data1[, categ[categ.len]]))) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT HAS THE LENGTH OF data1 ROW NUMBER\nCOLORS HAVE BEEN RESPECTIVELY ASSOCIATED TO EACH CLASS OF categ ", categ[categ.len], " AS:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\n", paste(categ.color, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +}else if(length(categ.color) == 1){ +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +data1 <- data.frame(data1, categ.color = categ.color) +categ.color <- rep(categ.color, length(levels(data1[, categ[categ.len]]))) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") categ.color ARGUMENT HAS LENGTH 1, MEANING THAT ALL THE DIFFERENT CLASSES OF ", categ[categ.len], "\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(categ.color, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else{ +tempo.cat <- paste0("ERROR IN ", function.name, "\ncateg.color ARGUMENT MUST BE (1) LENGTH 1, OR (2) THE LENGTH OF data1 NROWS, OR (3) THE LENGTH OF THE CLASSES IN THE categ ", categ[categ.len], " COLUMN. HERE IT IS COLOR LENGTH ", length(categ.color), " VERSUS CATEG LENGTH ", length(data1[, categ[categ.len]]), " AND CATEG CLASS LENGTH ", length(unique(data1[, categ[categ.len]])), "\nPRESENCE OF NA COULD BE THE PROBLEM") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +}else{ +categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2 +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +categ.color <- fun_gg_palette(length(levels(data1[, categ[categ.len]]))) +data1 <- data.frame(data1, categ.color = data1[, categ[categ.len]]) +data1$categ.color <- factor(data1$categ.color, labels = categ.color) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL categ.color ARGUMENT -> COLORS RESPECTIVELY ATTRIBUTED TO EACH CLASS OF ", categ[categ.len], " IN data1:\n", paste(categ.color, collapse = " "), "\n", paste(levels(data1[, categ[categ.len]]), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# categ.color not NULL anymore +categ.color <- as.character(categ.color) +# categ.color is a character string representing the diff classes +data1$categ.color <- factor(data1$categ.color, levels = unique(categ.color)) # ok because if categ.color is a character string, the order make class 1, class 2, etc. unique() because no duplicates allowed +# data1$categ.color is a factor with order of levels -> categ.color +# end management of categ.color +# management of dot.color +if( ! is.null(dot.color)){ +# optional legend of dot colors +if( ! is.null(dot.categ)){ +ini.dot.categ <- dot.categ +if( ! dot.categ %in% names(data1)){ # no need to use all() because length(dot.categ) = 1 +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ ARGUMENT MUST BE A COLUMN NAME OF data1. HERE IT IS:\n", dot.categ) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if(dot.categ %in% categ){ # no need to use all() because length(dot.categ) = 1. Do not use dot.categ %in% categ[length(categ)] -> error +# management of dot legend if dot.categ %in% categ (because legends with the same name are joined in ggplot2) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE COLUMN NAME OF data1 INDICATED IN THE dot.categ ARGUMENT (", dot.categ, ") HAS BEEN REPLACED BY ", paste0(dot.categ, "_DOT"), " TO AVOID MERGED LEGEND BY GGPLOT2") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +data1 <- data.frame(data1, dot.categ = data1[, dot.categ]) # dot.categ is not a column name of data1 (checked above with reserved words) +dot.categ <- paste0(dot.categ, "_DOT") +names(data1)[names(data1) == "dot.categ"] <- dot.categ # paste0(dot.categ, "_DOT") is not a column name of data1 (checked above with reserved words) +# tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ ARGUMENT CANNOT BE A COLUMN NAME OF data1 ALREADY SPECIFIED IN THE categ ARGUMENT:\n", dot.categ, "\nINDEED, dot.categ ARGUMENT IS MADE TO HAVE MULTIPLE DOT COLORS NOT RELATED TO THE BOXPLOT CATEGORIES") +# stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +tempo1 <- fun_check(data = data1[, dot.categ], data.name = paste0(dot.categ, " COLUMN OF data1"), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = data1[, dot.categ], data.name = paste0(dot.categ, " COLUMN OF data1"), class = "factor", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ COLUMN MUST BE A FACTOR OR CHARACTER VECTOR") # +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +data1[, dot.categ] <- factor(data1[, dot.categ]) # if already a factor, change nothing, if characters, levels according to alphabetical order +# dot.categ column of data1 is factor from here +if( ! is.null(dot.categ.class.order)){ +if(any(duplicated(dot.categ.class.order))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ.class.order ARGUMENT CANNOT HAVE DUPLICATED CLASSES: ", paste(dot.categ.class.order, collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if( ! (all(dot.categ.class.order %in% levels(data1[, dot.categ])) & all(levels(data1[, dot.categ]) %in% dot.categ.class.order))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.categ.class.order ARGUMENT MUST BE CLASSES OF dot.categ ARGUMENT\nHERE IT IS:\n", paste(dot.categ.class.order, collapse = " "), "\nFOR dot.categ.class.order AND IT IS:\n", paste(levels(data1[, dot.categ]), collapse = " "), "\nFOR dot.categ COLUMN (", ini.dot.categ, ") OF data1") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor +} +}else{ +if(all(dot.color == "same") & length(dot.color) == 1){ +dot.categ.class.order <- unlist(categ.class.order[length(categ)]) +data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order SETTING IS NULL AND dot.color IS \"same\". ORDER OF categ.class.order WILL BE APPLIED FOR LEGEND DISPLAY: ", paste(dot.categ.class.order, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else{ +dot.categ.class.order <- sort(levels(data1[, dot.categ])) +data1[, dot.categ] <- factor(data1[, dot.categ], levels = dot.categ.class.order) # reorder the factor +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order SETTING IS NULL. ALPHABETICAL ORDER WILL BE APPLIED FOR LEGEND DISPLAY: ", paste(dot.categ.class.order, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +# dot.categ.class.order not NULL anymore (character string) if dot.categ is not NULL +if(all(dot.color == "same") & length(dot.color) == 1){ +if( ! identical(ini.dot.categ, categ[length(categ)])){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nWHEN dot.color ARGUMENT IS \"same\", THE COLUMN NAME IN dot.categ ARGUMENT MUST BE IDENTICAL TO THE LAST COLUMN NAME IN categ ARGUMENT. HERE IT IS:\ndot.categ: ", paste(ini.dot.categ, collapse = " "), "\ncateg: ", paste(categ, collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if( ! fun_comp_1d(unlist(categ.class.order[length(categ)]), dot.categ.class.order)$identical.content){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nWHEN dot.color ARGUMENT IS \"same\",\nLAST COMPARTMENT OF categ.class.order ARGUMENT AND dot.categ.class.order ARGUMENT CANNOT BE DIFFERENT:\nLAST COMPARTMENT OF categ.class.order: ", paste(unlist(categ.class.order[length(categ)]), collapse = " "), "\ndot.categ.class.order: ", paste(dot.categ.class.order, collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +} +for(i3 in 1:length(categ)){ +if(identical(categ[i3], ini.dot.categ) & ! identical(unlist(categ.class.order[i3]), dot.categ.class.order) & identical(sort(unlist(categ.class.order[i3])), sort(dot.categ.class.order))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE dot.categ ARGUMENT SETTING IS PRESENT IN THE categ ARGUMENT SETTING, BUT ORDER OF THE CLASSES IS NOT THE SAME:\ncateg.class.order: ", paste(unlist(categ.class.order[i3]), collapse = " "), "\ndot.categ.class.order: ", paste(dot.categ.class.order, collapse = " "), "\nNOTE THAT ORDER OF categ.class.order IS THE ONE USED FOR THE AXIS REPRESENTATION") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +if(is.null(dot.categ.legend.name)){ +dot.categ.legend.name <- if(ini.dot.categ %in% categ[length(categ)]){dot.categ}else{ini.dot.categ} # +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE dot.categ.legend.name SETTING IS NULL -> ", dot.categ.legend.name, " WILL BE USED AS LEGEND TITLE OF DOTS") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# dot.categ.legend.name not NULL anymore (character string) +}else{ +if( ! is.null(dot.categ.class.order)){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE dot.categ.class.order ARGUMENT IS NOT NULL, BUT IS THE dot.categ ARGUMENT\n-> dot.categ.class.order NOT CONSIDERED AS NO LEGEND WILL BE DRAWN") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# But dot.categ.class.order will be converted to NULL below (not now) +} +# end optional legend of dot colors +# check the nature of color +# integer colors into gg_palette +tempo.check.color <- fun_check(data = dot.color, class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name, print = FALSE)$problem +if(tempo.check.color == FALSE){ +# convert integers into colors +dot.color <- fun_gg_palette(max(dot.color, na.rm = TRUE))[dot.color] +} +# end integer colors into gg_palette +if(all(dot.color == "same") & length(dot.color) == 1){ +dot.color <- categ.color # same color of the dots as the corresponding box color +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT HAS BEEN SET TO \"same\"\nTHUS, DOTS WILL HAVE THE SAME COLORS AS THE CORRESPONDING BOXPLOT") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if( ! (all(dot.color %in% colors() | grepl(pattern = "^#", dot.color)))){ # check that all strings of low.color start by # +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT MUST BE (1) A HEXADECIMAL COLOR VECTOR STARTING BY #, OR (2) COLOR NAMES GIVEN BY colors(), OR (3) INTEGERS, OR THE STRING\"same\"\nHERE IT IS: ", paste(unique(dot.color), collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +if(any(is.na(dot.color))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT CONTAINS NA") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end check the nature of color +# check the length of color +if( ! is.null(dot.categ)){ +# optional legend of dot colors +if(length(dot.color) > 1 & length(unique(data1[, dot.categ])) != length(dot.color)){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT IS NOT THE SAME LENGTH AS LEVELS OF dot.categ COLUMN (", dot.categ, "):\ndot.color: ", paste(dot.color, collapse = " "), "\ndot.categ LEVELS: ", paste(levels(data1[, dot.categ]), collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color +dot.color <- rep(dot.color, length(dot.categ.class.order)) +} +data1 <- data.frame(data1, dot.color = data1[, dot.categ]) +data1$dot.color <- factor(data1$dot.color, labels = dot.color) # do not use labels = unique(dot.color). Otherwise, we can have green1 green2 when dot.color is c("green", "green") +dot.color <- as.character(unique(data1$dot.color[order(data1[, dot.categ])])) # reorder the dot.color character vector +if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color +dot.color <- rep(dot.color, length(dot.categ.class.order)) +} +tempo.check <- unique(data1[ , c(dot.categ, "dot.color")]) +if(length(unique(data1[ , "dot.color"])) > 1 & ( ! (nrow(tempo.check) == length(unique(data1[ , "dot.color"])) & nrow(tempo.check) == length(unique(data1[ , dot.categ]))))){ # length(unique(data1[ , "dot.color"])) > 1 because if only one color, can be attributed to each class of dot.categ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF dot.categ (", dot.categ, ") COLUMN:\n", paste(unique(mapply(FUN = "paste", data1[ , dot.categ], data1[ ,"dot.color"])), collapse = "\n")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else{ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN dot.categ ARGUMENT (", ini.dot.categ, "), THE FOLLOWING COLORS OF DOTS:\n", paste(dot.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(data1[, dot.categ]), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# dot.color is a character string representing the diff classes of dot.categ +# data1$dot.color is a factor with order of levels -> dot.categ +# end optional legend of dot colors +}else{ +categ.len <- length(categ) # if only categ1, then colors for classes of categ1, if length(categ) == 2, then colors for classes of categ2 +if(length(dot.color) == length(levels(data1[, categ[categ.len]]))){ # here length(dot.color) is equal to the different number of categ +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +data1 <- data.frame(data1, dot.color = data1[, categ[categ.len]]) +data1$dot.color <- factor(data1$dot.color, labels = dot.color) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", categ[categ.len], " OF categ ARGUMENT, THE FOLLOWING COLORS:\n", paste(dot.color, collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(length(dot.color) == length(data1[, categ[categ.len]])){# here length(dot.color) is equal to nrow(data1) -> Modif to have length(dot.color) equal to the different number of categ (length(dot.color) == length(levels(data1[, categ[categ.len]]))) +data1 <- data.frame(data1, dot.color = dot.color) +}else if(length(dot.color) == 1 & ! all(dot.color == "same")){ +# data1[, categ[categ.len]] <- factor(data1[, categ[categ.len]]) # not required because sure that is is a factor +data1 <- data.frame(data1, dot.color = dot.color) +dot.color <- rep(dot.color, length(levels(data1[, categ[categ.len]]))) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") dot.color ARGUMENT HAS LENGTH 1, MEANING THAT ALL THE DIFFERENT CLASSES OF ", categ[categ.len], "\n", paste(levels(factor(data1[, categ[categ.len]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(dot.color, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else{ +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.color ARGUMENT MUST BE (1) LENGTH 1, OR (2) THE LENGTH OF data1 NROWS, OR (3) THE LENGTH OF THE CLASSES IN THE categ ", categ[categ.len], " COLUMN. HERE IT IS COLOR LENGTH ", length(dot.color), " VERSUS CATEG LENGTH ", length(data1[, categ[categ.len]]), " AND CATEG CLASS LENGTH ", length(unique(data1[, categ[categ.len]])), "\nPRESENCE OF NA COULD BE THE PROBLEM") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +# end check the length of color +dot.color <- as.character(dot.color) +# dot.color is a character string representing the diff classes +data1$dot.color <- factor(data1$dot.color, levels = unique(dot.color)) # ok because if dot.color is a character string, the order make class 1, class 2, etc. If dot.color is a column of data1, then levels will be created, without incidence, except if dot.categ specified (see below). unique() because no duplicates allowed +# data1$dot.color is a factor with order of levels -> dot.color +} +# end optional legend of dot colors +}else if(is.null(dot.color) & ! (is.null(dot.categ) & is.null(dot.categ.class.order) & is.null(dot.categ.legend.name))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") dot.categ OR dot.categ.class.order OR dot.categ.legend.name ARGUMENT HAS BEEN SPECIFIED BUT dot.color ARGUMENT IS NULL (NO DOT PLOTTED)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# dot.color either NULL (no dot plotted) or character string (potentially representing the diff classes of dot.categ) +# data1$dot.color is either NA or a factor (with order of levels -> depending on dot.categ or categ[length(categ)], or other +if(is.null(dot.categ)){ +dot.categ.class.order <- NULL # because not used anyway +} +# dot.categ.class.order either NULL if dot.categ is NULL (no legend displayed) or character string (potentially representing the diff classes of dot.categ) +# end management of dot.color +if(is.null(dot.color) & box.fill == FALSE & dot.alpha <= 0.025){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE FOLLOWING ARGUMENTS WERE SET AS:\ndot.color = NULL (NOT ALL DOTS BUT ONLY POTENTIAL OUTLIER DOTS DISPLAYED)\nbox.fill = FALSE (NO FILLING COLOR FOR BOTH BOXES AND POTENTIAL OUTLIER DOTS)\ndot.alpha = ", fun_round(dot.alpha, 4), "\n-> POTENTIAL OUTLIER DOTS MIGHT NOT BE VISIBLE BECAUSE ALMOST TRANSPARENT") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +if(is.null(dot.color) & box.fill == FALSE & dot.border.size == 0){ +tempo.cat <- paste0("ERROR IN ", function.name, "\nTHE FOLLOWING ARGUMENTS WERE SET AS:\ndot.color = NULL (NOT ALL DOTS BUT ONLY POTENTIAL OUTLIER DOTS DISPLAYED)\nbox.fill = FALSE (NO FILLING COLOR FOR BOTH BOXES AND POTENTIAL OUTLIER DOTS)\ndot.border.size = 0 (NO BORDER FOR POTENTIAL OUTLIER DOTS)\n-> THESE SETTINGS ARE NOT ALLOWED BECAUSE THE POTENTIAL OUTLIER DOTS WILL NOT BE VISIBLE") +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +if( ! is.null(dot.border.color)){ +tempo1 <- fun_check(data = dot.border.color, class = "vector", mode = "character", length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = dot.border.color, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, fun.name = function.name, print = FALSE) +if(tempo1$problem == FALSE & tempo2$problem == TRUE & ! (all(dot.border.color %in% colors() | grepl(pattern = "^#", dot.border.color)))){ # check that all strings of low.color start by # +tempo.cat <- paste0("ERROR IN ", function.name, "\ndot.border.color ARGUMENT MUST BE (1) A HEXADECIMAL COLOR STRING STARTING BY #, OR (2) A COLOR NAME GIVEN BY colors(), OR (3) AN INTEGER VALUE\nHERE IT IS: ", paste(unique(dot.border.color), collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +}else if(tempo1$problem == TRUE & tempo2$problem == FALSE){ # convert integers into colors +dot.border.color <- fun_gg_palette(max(dot.border.color, na.rm = TRUE))[dot.border.color] +} +# end integer colors into gg_palette +} +if(y.log != "no"){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") y.log ARGUMENT SET TO ", y.log, ".\nVALUES FROM THE y ARGUMENT COLUMN OF THE data1 DATA FRAME MUST BE ALREADY ", toupper(y.log), " TRANSFORMED, AS THE y.log ARGUMENT JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +if( ! is.null(y.lim)){ +if(any(y.lim <= 0)){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") y.lim ARGUMENT CAN SPAN ZERO OR NEGATIVE VALUES IF y.log ARGUMENT IS SET TO ", y.log, " BECAUSE y.log DOES NOT TRANSFORM DATA, JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(any( ! is.finite(if(y.log == "log10"){10^y.lim}else{2^y.lim}))){ +tempo.cat <- paste0("ERROR IN ", function.name, "\ny.lim ARGUMENT RETURNS INF WITH THE y.log ARGUMENT SET TO ", y.log, "\nAS SCALE COMPUTATION IS ", ifelse(y.log == "log10", 10, 2), "^y.lim:\n", paste(ifelse(y.log == "log10", 10, 2)^y.lim, collapse = " "), "\nARE YOU SURE THAT y.lim ARGUMENT HAS BEEN SPECIFIED WITH VALUES ALREADY IN LOG SCALE?\n", paste(y.lim, collapse = " ")) +stop(paste0("\n\n================\n\n", tempo.cat, "\n\n================\n\n"), call. = FALSE) +} +} +} +# inactivated because y must already be log transformed data +# if(y.log != "no" & y.include.zero == TRUE){ +# warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") y.log ARGUMENT SET TO ", y.log, " AND y.include.zero ARGUMENT SET TO TRUE -> y.include.zero ARGUMENT RESET TO FALSE BECAUSE NO 0 ALLOWED IN LOG SCALE") +# warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +# } +if(y.log != "no" & vertical == FALSE){ +vertical <- TRUE +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") BECAUSE OF A BUG IN ggplot2, CANNOT FLIP BOXS HORIZONTALLY WITH A Y.LOG SCALE -> vertical ARGUMENT RESET TO TRUE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end second round of checking and data preparation + + +# package checking +fun_pack(req.package = c("ggplot2"), lib.path = lib.path) +fun_pack(req.package = c("scales"), lib.path = lib.path) +# end package checking + + + +# main code +# na detection and removal (done now to be sure of the correct length of categ) +column.check <- c(y, categ, "categ.color", if( ! is.null(dot.color)){"dot.color"}, if( ! is.null(dot.color) & ! is.null(dot.categ)){if(dot.categ != ini.dot.categ){dot.categ}}, if( ! is.null(facet.categ)){facet.categ}) # dot.categ because can be a 3rd column of data1 +if(any(is.na(data1[, column.check]))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NA DETECTED IN COLUMNS ", paste(column.check, collapse = " "), " OF data1 AND CORRESPONDING ROWS REMOVED (SEE $removed.row.nb AND $removed.rows)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +for(i2 in 1:length(column.check)){ +if(any(is.na(data1[, column.check[i2]]))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NA REMOVAL DUE TO COLUMN ", column.check[i2], " OF data1") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +removed.row.nb <- unlist(lapply(lapply(c(data1[column.check]), FUN = is.na), FUN = which)) +removed.rows <- data1[removed.row.nb, ] +column.check <- column.check[ ! column.check == y] # remove y to keep quali columns +if(length(removed.row.nb) != 0){ +data1 <- data1[-removed.row.nb, ] +for(i3 in 1:length(column.check)){ +if(any( ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]]))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN COLUMN ", column.check[i3], " OF data1, THE FOLLOWING CLASSES HAVE DISAPPEARED AFTER NA REMOVAL (IF COLUMN USED IN THE PLOT, THIS CLASS WILL NOT BE DISPLAYED):\n", paste(unique(removed.rows[, column.check[i3]])[ ! unique(removed.rows[, column.check[i3]]) %in% unique(data1[, column.check[i3]])], collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +} +count.categ <- 0 +for(i2 in 1:length(column.check)){ +if(column.check[i2] %in% categ){ +count.categ <- count.categ + 1 +} +if(column.check[i2] == categ[count.categ]){ +categ.class.order[count.categ] <- list(levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])]) # remove the absent color in the character vector +data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(categ.class.order[[count.categ]])) +} +if( ! is.null(dot.color) & ! is.null(dot.categ)){ # reminder : dot.categ cannot be a column name of categ anymore (because in that case dot.categ name is changed into "..._DOT" +if(column.check[i2] == ini.dot.categ){ +dot.categ.class.order <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector +data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(dot.categ.class.order)) +} +} +if(column.check[i2] == "categ.color"){ +categ.color <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector +if(length(categ.color) == 1 & length(unlist(categ.class.order[length(categ)])) > 1){ # to deal with single color +categ.color <- rep(categ.color, length(unlist(categ.class.order[length(categ)]))) +} +data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(categ.color)) +} +if(column.check[i2] == "dot.color"){ +dot.color <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(data1[, column.check[i2]])] # remove the absent color in the character vector +if(length(dot.color) == 1 & length(dot.categ.class.order) > 1){ # to deal with single color. If dot.categ.class.order == NULL (which is systematically the case if dot.categ == NULL), no rep(dot.color, length(dot.categ.class.order) +dot.color <- rep(dot.color, length(dot.categ.class.order)) +} +data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = unique(dot.color)) +} +if(column.check[i2] %in% facet.categ){ # works if facet.categ == NULL this method should keep the order of levels when removing some levels +tempo.levels <- levels(data1[, column.check[i2]])[levels(data1[, column.check[i2]]) %in% unique(as.character(data1[, column.check[i2]]))] +data1[, column.check[i2]] <- factor(as.character(data1[, column.check[i2]]), levels = tempo.levels) +} +} +}else{ +removed.row.nb <- NULL +removed.rows <- NULL +} +# end na detection and removal (done now to be sure of the correct length of categ) + + +# y coordinates recovery (create ini.box.coord, dot.coord and modify data1) +if(length(categ) == 1){ +# width commputations +box.width2 <- box.width +box.space <- 0 # to inactivate the shrink that add space between grouped boxes, because no grouped boxes here +# end width commputations +# data1 check categ order for dots coordinates recovery +data1 <- data.frame(data1, categ.check = data1[, categ[1]]) +data1$categ.check <- as.integer(data1$categ.check) # to check that data1[, categ[1]] and dot.coord$group are similar, during merging +# end data1 check categ order for dots coordinates recovery +# per box dots coordinates recovery +tempo.gg.name <- "gg.indiv.plot." +tempo.gg.count <- 0 +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add added here to have the facets +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[1]), stroke = dot.border.size, size = dot.size, alpha = dot.alpha, shape = 21)) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = categ.legend.name, values = if(is.null(dot.color)){rep(NA, length(unique(data1[, categ[1]])))}else if(length(dot.color) == 1){rep(dot.color, length(unique(data1[, categ[1]])))}else{dot.color})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[1]), coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf})) # fill because this is what is used with geom_box # to easily have the equivalent of the grouped boxs +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = categ.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[1]])))}else{categ.color})) +# end per box dots coordinates recovery +}else if(length(categ) == 2){ +# width commputations +box.width2 <- box.width / length(unique(data1[, categ[length(categ)]])) # real width of each box in x-axis unit, among the set of grouped box. Not relevant if no grouped boxs length(categ) == 1 +# end width commputations +# data1 check categ order for dots coordinates recovery +tempo.factor <- paste0(data1[order(data1[, categ[2]], data1[, categ[1]]), categ[2]], "_", data1[order(data1[, categ[2]], data1[, categ[1]]), categ[1]]) +data1 <- data.frame(data1[order(data1[, categ[2]], data1[, categ[1]]), ], categ.check = factor(tempo.factor, levels = unique(tempo.factor))) +data1$categ.check <- as.integer(data1$categ.check) +# end data1 check categ order for dots coordinates recovery +# per box dots coordinates recovery +tempo.gg.name <- "gg.indiv.plot." +tempo.gg.count <- 0 +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add added here to have the facets +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[2]), stroke = dot.border.size, size = dot.size, alpha = dot.alpha, shape = 21)) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = categ.legend.name, values = if(is.null(dot.color)){rep(NA, length(unique(data1[, categ[2]])))}else if(length(dot.color) == 1){rep(dot.color, length(unique(data1[, categ[2]])))}else{dot.color})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[2]), coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf})) # fill because this is what is used with geom_box # to easily have the equivalent of the grouped boxs +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = categ.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[2]])))}else{categ.color})) +# end per box dots coordinates recovery +}else{ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 2\n\n============\n\n") +stop(tempo.cat) +} +tempo.graph.info.ini <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + ")))) +dot.coord <- tempo.graph.info.ini$data[[1]] +ini.box.coord <- tempo.graph.info.ini$data[[2]] +tempo.mean <- aggregate(x = dot.coord$y, by = list(dot.coord$group, dot.coord$PANEL), FUN = mean, na.rm = TRUE) +names(tempo.mean)[names(tempo.mean) == "x"] <- "MEAN" +names(tempo.mean)[names(tempo.mean) == "Group.1"] <- "BOX" +names(tempo.mean)[names(tempo.mean) == "Group.2"] <- "PANEL" +dot.coord <- data.frame( +dot.coord[order(dot.coord$group, dot.coord$y), ], +y.check = as.double(data1[order(data1$categ.check, data1[, y]), y]), +categ.check = data1[order(data1$categ.check, data1[, y]), "categ.check"], +dot.color = if(is.null(dot.color)){NA}else{data1[order(data1$categ.check, data1[, y]), "dot.color"]}, +data1[order(data1$categ.check, data1[, y]), ][categ] # avoid the renaming below +) # y.check to be sure that the order is the same between the y of data1 and the y of dot.coord +# names(dot.coord)[names(dot.coord) == "tempo.categ1"] <- categ[1] +if( ! is.null(dot.categ)){ +dot.coord <- data.frame(dot.coord, data1[order(data1$categ.check, data1[, y]), ][dot.categ]) # avoid the renaming +} +if( ! is.null(facet.categ)){ +dot.coord <- data.frame(dot.coord, data1[order(data1$categ.check, data1[, y]), ][facet.categ]) # for facet panels +tempo.test <- NULL +for(i2 in 1:length(facet.categ)){ +tempo.test <- paste0(tempo.test, ".", formatC(as.numeric(dot.coord[, facet.categ[i2]]), width = nchar(max(as.numeric(dot.coord[, facet.categ[i2]]), na.rm = TRUE)), flag = "0")) # convert factor into numeric with leading zero for proper ranking # merge the formatC() to create a new factor. The convertion to integer should recreate the correct group number. Here as.numeric is used and not as.integer in case of numeric in facet.categ (because comes from add and not checked by fun_check, contrary to categ) +} +tempo.test <- as.integer(factor(tempo.test)) +if( ! identical(as.integer(dot.coord$PANEL), tempo.test)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nas.integer(dot.coord$PANEL) AND tempo.test MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +} +if(dot.tidy == TRUE){ +if( ! is.null(dot.categ)){ +dot.coord <- data.frame(dot.coord, tidy_group = data1[order(data1$categ.check, data1[, y]), ][, dot.categ]) # avoid the renaming +# tidy_group_coord is to be able to fuse table when creating the table for dot coordinates +if(dot.categ %in% categ){ +dot.coord <- data.frame(dot.coord, tidy_group_coord = dot.coord$group) +}else{ +dot.coord <- data.frame(dot.coord, tidy_group_coord = as.integer(factor(paste0( +formatC(as.integer(dot.coord[, categ[1]]), width = nchar(max(as.integer(dot.coord[, categ[1]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking +".", +if(length(categ) == 2){formatC(as.integer(dot.coord[, categ[2]]), width = nchar(max(as.integer(dot.coord[, categ[2]]), na.rm = TRUE)), flag = "0")}, # convert factor into numeric with leading zero for proper ranking +if(length(categ) == 2){"."}, +formatC(as.integer(dot.coord[, dot.categ]), width = nchar(max(as.integer(dot.coord[, dot.categ]), na.rm = TRUE)), flag = "0") # convert factor into numeric with leading zero for proper ranking +))) # merge the 2 or 3 formatC() to create a new factor. The convertion to integer should recreate the correct group number +) # for tidy dot plots +} +}else{ +dot.coord <- data.frame(dot.coord, tidy_group = if(length(categ) == 1){ +dot.coord[, categ]}else{as.integer(factor(paste0( +formatC(as.integer(dot.coord[, categ[1]]), width = nchar(max(as.integer(dot.coord[, categ[1]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking +".", +formatC(as.integer(dot.coord[, categ[2]]), width = nchar(max(as.integer(dot.coord[, categ[2]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking +))) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number +}) # for tidy dot plots +# tidy_group_coord is to be able to fuse table when creating the table for dot coordinates +dot.coord <- data.frame(dot.coord, tidy_group_coord = dot.coord$group) +} +} +if( ! (identical(dot.coord$y, dot.coord$y.check) & identical(dot.coord$group, dot.coord$categ.check))){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\n(dot.coord$y AND dot.coord$y.check) AS WELL AS (dot.coord$group AND dot.coord$categ.check) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +if( ! identical(tempo.mean[order(tempo.mean$BOX, tempo.mean$PANEL), ]$BOX, unique(dot.coord[order(dot.coord$group, dot.coord$PANEL), c("group", "PANEL")])$group)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\n(tempo.mean$BOX, tempo.mean$PANEL) AND (dot.coord$group, dot.coord$PANEL) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +tempo <- unique(dot.coord[order(dot.coord$group, dot.coord$PANEL), c(categ, if( ! is.null(dot.color) & ! is.null(dot.categ)){if(dot.categ != ini.dot.categ){dot.categ}}, if( ! is.null(facet.categ)){facet.categ}), drop = FALSE]) +# names(tempo) <- paste0(names(tempo), ".mean") +tempo.mean <- data.frame(tempo.mean[order(tempo.mean$BOX, tempo.mean$PANEL), ], tempo) +} +} +# at that stage, categ color and dot color are correctly attributed in data1, box.coord and dot.coord +# end y dot coordinates recovery (create ini.box.coord, dot.coord and modify data1) + + + + + + + + + + + + + +# stat output (will also serve for boxplot and mean display) +ini.box.coord <- ini.box.coord[order(ini.box.coord$group), ] +stat <- data.frame(MIN = ini.box.coord$ymin, QUART1 = ini.box.coord$lower, MEDIAN = ini.box.coord$middle, QUART3 = ini.box.coord$upper, MAX = ini.box.coord$ymax, NOTCHUPPER = ini.box.coord$notchupper, NOTCHLOWER = ini.box.coord$notchlower, OUTLIERS = ini.box.coord["outliers"], COLOR = ini.box.coord$fill, stringsAsFactors = TRUE) # ini.box.coord["outliers"] written like this because it is a list. X coordinates not put now because several features to set +names(stat)[names(stat) == "outliers"] <- "OUTLIERS" +tempo.mean <- tempo.mean[order(tempo.mean$BOX), ] +if( ! fun_comp_2d(ini.box.coord[c("PANEL", "group")], tempo.mean[c("PANEL", "BOX")])$identical.content){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nini.box.coord[c(\"PANEL\", \"group\")] AND tempo.mean[c(\"PANEL\", \"BOX\")] MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +stat <- data.frame(stat[c("MIN", "QUART1", "MEDIAN")], MEAN = tempo.mean$MEAN, stat[c("QUART3", "MAX", "NOTCHUPPER", "NOTCHLOWER", "OUTLIERS")], tempo.mean[colnames(tempo.mean) != "MEAN"], stat["COLOR"], stringsAsFactors = TRUE) # ini.box.coord["outliers"] written like this because it is a list +} +# end stat output (will also serve for boxplot and mean display) + + + + + + + + +# ylim range +if(is.null(y.lim)){ +if(any(data1[, y] %in% c(Inf, -Inf))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE data1 ARGUMENT CONTAINS -Inf OR Inf VALUES IN THE y COLUMN, THAT WILL NOT BE CONSIDERED IN THE PLOT RANGE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +y.lim <- range(data1[, y], na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only +} +if(suppressWarnings(all(y.lim %in% c(Inf, -Inf)))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " COMPUTED y.lim CONTAINS Inf VALUES, BECAUSE VALUES FROM data1 ARGUMENTS ARE NA OR Inf ONLY\n\n================\n\n") +stop(tempo.cat) +} +y.lim.order <- order(y.lim) # to deal with inverse axis +y.lim <- sort(y.lim) +y.lim[1] <- y.lim[1] - abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.bottom.extra.margin, y.top.extra.margin) # diff(y.lim.order) > 0 medians not inversed axis +y.lim[2] <- y.lim[2] + abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.top.extra.margin, y.bottom.extra.margin) # diff(y.lim.order) > 0 medians not inversed axis +if(y.include.zero == TRUE){ # no need to check y.log != "no" because done before +y.lim <- range(c(y.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only +} +y.lim <- y.lim[y.lim.order] +if(any(is.na(y.lim))){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 4\n\n============\n\n") +stop(tempo.cat) +} +# end ylim range + + + + + + +# drawing +# constant part +tempo.gg.name <- "gg.indiv.plot." +tempo.gg.count <- 0 +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste0("ggplot2::ggplot()", if(is.null(add)){""}else{add})))) # add is directly put here to deal with additional variable of data, like when using facet_grid. No problem if add is a theme, will be dealt below +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::xlab(if(is.null(x.lab)){categ[1]}else{x.lab})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ylab(if(is.null(y.lab)){y}else{y.lab})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ggtitle(title)) +# text angle management +tempo.just <- fun_gg_just(angle = text.angle, axis = ifelse(vertical == TRUE, "x", "y")) +# end text angle management +add.check <- TRUE +if( ! is.null(add)){ # if add is NULL, then = 0 +if(grepl(pattern = "ggplot2::theme", add) == TRUE){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") \"ggplot2::theme\" STRING DETECTED IN THE add ARGUMENT -> article ARGUMENT WILL BE IGNORED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +add.check <- FALSE +} +} +if(add.check == TRUE & article == TRUE){ +# BEWARE: not possible to add theme()several times. NO message but the last one overwrites the others +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::theme_classic(base_size = text.size)) +if(grid == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +line = ggplot2::element_line(size = 0.5), +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +axis.line.y.left = ggplot2::element_line(colour = "black"), # draw lines for the y axis +axis.line.x.bottom = ggplot2::element_line(colour = "black"), # draw lines for the x axis +panel.grid.major.x = if(vertical == TRUE){NULL}else{ggplot2::element_line(colour = "grey85")}, +panel.grid.major.y = if(vertical == TRUE){ggplot2::element_line(colour = "grey85")}else{NULL}, +axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)}else{NULL}, +axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)}, +strip.background = ggplot2::element_rect(fill = NA, colour = NA) +)) +}else{ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +line = ggplot2::element_line(size = 0.5), +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +axis.line.y.left = ggplot2::element_line(colour = "black"), +axis.line.x.bottom = ggplot2::element_line(colour = "black"), +axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)}else{NULL}, +axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)}, +strip.background = ggplot2::element_rect(fill = NA, colour = NA) +)) +} +}else if(add.check == TRUE & article == FALSE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +line = ggplot2::element_line(size = 0.5), +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +panel.background = ggplot2::element_rect(fill = "grey95"), +axis.line.y.left = ggplot2::element_line(colour = "black"), +axis.line.x.bottom = ggplot2::element_line(colour = "black"), +panel.grid.major.x = ggplot2::element_line(colour = "grey85"), +panel.grid.major.y = ggplot2::element_line(colour = "grey85"), +panel.grid.minor.x = ggplot2::element_blank(), +panel.grid.minor.y = ggplot2::element_blank(), +strip.background = ggplot2::element_rect(fill = NA, colour = NA), +axis.text.x = if(vertical == TRUE){ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)}else{NULL}, +axis.text.y = if(vertical == TRUE){NULL}else{ggplot2::element_text(angle = tempo.just$angle, hjust = tempo.just$hjust, vjust = tempo.just$vjust)} +)) +} +# Contrary to fun_gg_bar(), cannot plot the boxplot right now, because I need the dots plotted first +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, group = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), color = NA, width = box.width, fill = NA)) # this is to set the graph (i.e., a blanck boxplot to be able to use x coordinates to plot dots before boxes) +# end constant part + + + + +# x coordinates management (for random plotting and for stat display) +# boxs +tempo.graph.info <- ggplot2::ggplot_build(eval(parse(text = paste0(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, notch = box.notch, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}) + ggplot2::scale_discrete_manual(aesthetics = "fill", name = categ.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color})')))) # will be recovered later again, when ylim will be considered +tempo.yx.ratio <- (tempo.graph.info$layout$panel_params[[1]]$y.range[2] - tempo.graph.info$layout$panel_params[[1]]$y.range[1]) / (tempo.graph.info$layout$panel_params[[1]]$x.range[2] - tempo.graph.info$layout$panel_params[[1]]$x.range[1]) +box.coord <- tempo.graph.info$data[[2]] # to have the summary statistics of the plot. Contrary to ini.box.plot, now integrates ylim Here because can be required for stat.disp when just box are plotted +box.coord <- box.coord[order(box.coord$group), ] +if(stat.disp.mean == TRUE){ # for mean display +if( ! identical(tempo.mean$BOX, box.coord$group)){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\ntempo.mean$BOX AND box.coord$group DO NOT HAVE THE SAME VALUE ORDER\n\n============\n\n") +stop(tempo.cat) +}else{ +tempo <- c(categ, if( ! is.null(dot.color) & ! is.null(dot.categ)){if(dot.categ != ini.dot.categ){dot.categ}}, if( ! is.null(facet.categ)){facet.categ}) +for(i3 in tempo){ +names(tempo.mean)[names(tempo.mean) == i3] <- paste0(i3, ".mean") +} +box.coord <- data.frame(box.coord, tempo.mean) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") MEAN VALUES INSTEAD OF MEDIAN VALUES DISPLAYED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) + +} +} +# width commputations +width.ini <- c(box.coord$xmax - box.coord$xmin)[1] # all the box widths are equal here. Only the first one taken +width.correct <- width.ini * box.space / 2 +if( ! identical(box.coord$group, stat$BOX)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\n(box.coord$group AND stat$BOX) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +stat <- data.frame( +stat, +X = box.coord$x, +X_BOX_INF = box.coord$xmin + width.correct, +X_BOX_SUP = box.coord$xmax - width.correct, +X_NOTCH_INF = box.coord$x - (box.coord$x - (box.coord$xmin + width.correct)) / 2, +X_NOTCH_SUP = box.coord$x + (box.coord$x - (box.coord$xmin + width.correct)) / 2, +X_WHISK_INF = box.coord$x - (box.coord$x - (box.coord$xmin + width.correct)) * box.whisker.width, +X_WHISK_SUP = box.coord$x + (box.coord$x - (box.coord$xmin + width.correct)) * box.whisker.width, +# tempo.mean[colnames(tempo.mean) != "MEAN"], # already added above +stringsAsFactors = TRUE +) +stat$COLOR <- factor(stat$COLOR, levels = unique(categ.color)) +if( ! all(stat$NOTCHUPPER < stat$QUART3 & stat$NOTCHLOWER > stat$QUART1) & box.notch == TRUE){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") SOME NOTCHES ARE BEYOND BOX HINGES. TRY ARGUMENT box.notch = FALSE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +dot.jitter <- c((box.coord$xmax - width.correct) - (box.coord$xmin + width.correct))[1] * dot.jitter # real dot.jitter. (box.coord$xmin + width.correct) - (box.coord$xmax - width.correct))[1] is the width of the box. Is equivalent to (box.coord$x - (box.coord$xmin + width.correct))[1] * 2 +# end width commputations +# end boxs +if( ! is.null(dot.color)){ +# random dots +if(dot.tidy == FALSE){ +dot.coord.rd1 <- merge(dot.coord, box.coord[c("fill", "PANEL", "group", "x")], by = c("PANEL", "group"), sort = FALSE) # rd for random. Send the coord of the boxs into the coord data.frame of the dots (in the column x.y). BEWARE: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in box.coord. Thus, no need to consider fill column +if(nrow(dot.coord.rd1) != nrow(dot.coord)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.rd1 DATA FRAME. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +set.seed(1) +sampled.dot.jitter <- if(nrow(dot.coord.rd1) == 1){runif(n = nrow(dot.coord.rd1), min = - dot.jitter / 2, max = dot.jitter / 2)}else{sample(x = runif(n = nrow(dot.coord.rd1), min = - dot.jitter / 2, max = dot.jitter / 2), size = nrow(dot.coord.rd1), replace = FALSE)} +dot.coord.rd2 <- data.frame(dot.coord.rd1, dot.x = dot.coord.rd1$x.y + sampled.dot.jitter) # set the dot.jitter thanks to runif and dot.jitter range. Then, send the coord of the boxs into the coord data.frame of the dots (in the column x.y) +set.seed(NULL) +if(length(categ) == 1){ +tempo.data1 <- unique(data.frame(data1[categ[1]], group = as.integer(data1[, categ[1]]))) # categ[1] is factor +names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check") +verif <- paste0(categ[1], ".check") +}else if(length(categ) == 2){ +tempo.data1 <- unique( +data.frame( +data1[c(categ[1], categ[2])], +group = as.integer(factor(paste0( +formatC(as.integer(data1[, categ[2]]), width = nchar(max(as.integer(data1[, categ[2]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking +".", +formatC(as.integer(data1[, categ[1]]), width = nchar(max(as.integer(data1[, categ[1]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking +))) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number +) +) # categ[2] first if categ[2] is used to make the categories in ggplot and categ[1] is used to make the x-axis +names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check") +names(tempo.data1)[names(tempo.data1) == categ[2]] <- paste0(categ[2], ".check") +verif <- c(paste0(categ[1], ".check"), paste0(categ[2], ".check")) +}else{ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 6\n\n============\n\n") +stop(tempo.cat) +} +dot.coord.rd3 <- merge(dot.coord.rd2, tempo.data1, by = intersect("group", "group"), sort = FALSE) # send the factors of data1 into coord. BEWARE: I have replaced by = "group" by intersect("group", "group") because of an error due to wrong group group merging in dot.coord.rd3 +if(nrow(dot.coord.rd3) != nrow(dot.coord) | ( ! fun_comp_2d(dot.coord.rd3[categ], dot.coord.rd3[verif])$identical.content)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.rd3 DATA FRAME. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +# end random dots +} +# tidy dots +# coordinates are recovered during plotting (see dot.coord.tidy1 below) +# end tidy dots +} +# end x coordinates management (for random plotting and for stat display) + + + + + +# boxplot display before dot display if box.fill = TRUE +coord.names <- NULL +# creation of the data frame for (main box + legend) and data frame for means +if(box.notch == FALSE){ +for(i3 in 1:length(categ)){ +if(i3 == 1){ +tempo.polygon <- data.frame(GROUPX = c(t(stat[, rep(categ[i3], 5)])), stringsAsFactors = TRUE) +}else{ +tempo.polygon <- cbind(tempo.polygon, c(t(stat[, rep(categ[i3], 5)])), stringsAsFactors = TRUE) +} +} +names(tempo.polygon) <- categ +tempo.polygon <- data.frame(X = c(t(stat[, c("X_BOX_INF", "X_BOX_SUP", "X_BOX_SUP", "X_BOX_INF", "X_BOX_INF")])), Y = c(t(stat[, c("QUART1", "QUART1", "QUART3", "QUART3", "QUART1")])), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), BOX = as.character(c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX")]))), tempo.polygon, stringsAsFactors = TRUE) +if( ! is.null(facet.categ)){ +for(i4 in 1:length(facet.categ)){ +tempo.polygon <- data.frame(tempo.polygon, c(t(stat[, c(facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4])])), stringsAsFactors = TRUE) +names(tempo.polygon)[length(names(tempo.polygon))] <- facet.categ[i4] +} +} +}else{ +for(i3 in 1:length(categ)){ +if(i3 == 1){ +tempo.polygon <- data.frame(GROUPX = c(t(stat[, rep(categ[i3], 11)])), stringsAsFactors = TRUE) +}else{ +tempo.polygon <- cbind(tempo.polygon, c(t(stat[, rep(categ[i3], 11)])), stringsAsFactors = TRUE) +} +} +names(tempo.polygon) <- categ +tempo.polygon <- data.frame(X = c(t(stat[, c("X_BOX_INF", "X_BOX_SUP", "X_BOX_SUP", "X_NOTCH_SUP", "X_BOX_SUP", "X_BOX_SUP", "X_BOX_INF", "X_BOX_INF", "X_NOTCH_INF", "X_BOX_INF", "X_BOX_INF")])), Y = c(t(stat[, c("QUART1", "QUART1", "NOTCHLOWER", "MEDIAN", "NOTCHUPPER", "QUART3", "QUART3", "NOTCHUPPER", "MEDIAN", "NOTCHLOWER", "QUART1")])), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), BOX = as.character(c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX", "BOX")]))), tempo.polygon, stringsAsFactors = TRUE) +if( ! is.null(facet.categ)){ +for(i4 in 1:length(facet.categ)){ +tempo.polygon <- data.frame(tempo.polygon, c(t(stat[, c(facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4], facet.categ[i4])])), stringsAsFactors = TRUE) +names(tempo.polygon)[length(names(tempo.polygon))] <- facet.categ[i4] +} +} +} +tempo.polygon$COLOR <- factor(tempo.polygon$COLOR, levels = unique(categ.color)) +if( ! is.null(categ.class.order)){ +for(i3 in 1:length(categ)){ +tempo.polygon[, categ[i3]] <- factor(tempo.polygon[, categ[i3]], levels = categ.class.order[[i3]]) +} +} +# modified name of dot.categ column (e.g., "Group1_DOT") must be included for boxplot using ridy dots +if( ! is.null(dot.color) & ! is.null(dot.categ)){ +if(dot.categ != ini.dot.categ){ +tempo.polygon <- data.frame(tempo.polygon, GROUPX = tempo.polygon[, ini.dot.categ]) +names(tempo.polygon)[names(tempo.polygon) == "GROUPX"] <- dot.categ + +} +} +tempo.diamon.mean <- data.frame(X = c(t(stat[, c("X", "X_NOTCH_INF", "X", "X_NOTCH_SUP", "X")])), Y = c(t(cbind(stat["MEAN"] - (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio, stat["MEAN"], stat["MEAN"] + (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio, stat["MEAN"], stat["MEAN"] - (stat[, "X"] - stat[, "X_NOTCH_INF"]) * tempo.yx.ratio))), COLOR = c(t(stat[, c("COLOR", "COLOR", "COLOR", "COLOR", "COLOR")])), GROUP = c(t(stat[, c("BOX", "BOX", "BOX", "BOX", "BOX")])), stringsAsFactors = TRUE) +if( ! is.null(facet.categ)){ +for(i3 in 1:length(facet.categ)){ +tempo.diamon.mean <- data.frame(tempo.diamon.mean, c(t(stat[, c(facet.categ[i3], facet.categ[i3], facet.categ[i3], facet.categ[i3], facet.categ[i3])])), stringsAsFactors = TRUE) +names(tempo.diamon.mean)[length(names(tempo.diamon.mean))] <- facet.categ[i3] +} +} +tempo.diamon.mean$COLOR <- factor(tempo.diamon.mean$COLOR, levels = unique(categ.color)) +# end creation of the data frame for (main box + legend) and data frame for means +if(box.fill == TRUE){ +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[length(categ)], fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, size = box.line.size, notch = box.notch, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}, alpha = box.alpha, outlier.shape = if( ! is.null(dot.color)){NA}else{21}, outlier.color = if( ! is.null(dot.color)){NA}else{dot.border.color}, outlier.fill = if( ! is.null(dot.color)){NA}else{NULL}, outlier.size = if( ! is.null(dot.color)){NA}else{dot.size}, outlier.stroke = if( ! is.null(dot.color)){NA}else{dot.border.size}, outlier.alpha = if( ! is.null(dot.color)){NA}else{dot.alpha})) # the color, size, etc. of the outliers are dealt here. outlier.color = NA to do not plot outliers when dots are already plotted. Finally, boxplot redrawn (see below) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_polygon( +data = tempo.polygon, +mapping = ggplot2::aes_string(x = "X", y = "Y", group = "BOX", fill = categ[length(categ)], color = categ[length(categ)]), +size = box.line.size, +alpha = box.alpha +)) +coord.names <- c(coord.names, "main.box") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = QUART3, yend = MAX, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha)) # +coord.names <- c(coord.names, "sup.whisker") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = QUART1, yend = MIN, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha)) # +coord.names <- c(coord.names, "inf.whisker") +if(box.whisker.width > 0){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = MAX, yend = MAX, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha, lineend = "round")) # +coord.names <- c(coord.names, "sup.whisker.edge") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = MIN, yend = MIN, group = categ[length(categ)]), color = "black", size = box.line.size, alpha = box.alpha, lineend = "round")) # +coord.names <- c(coord.names, "inf.whisker.edge") +} +if(box.mean == TRUE){ +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = stat, mapping = ggplot2::aes_string(x = "X", y = "MEAN", group = categ[length(categ)]), shape = 23, stroke = box.line.size * 2, fill = stat$COLOR, size = box.mean.size, color = "black", alpha = box.alpha)) # group used in aesthetic to do not have it in the legend +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_polygon( +data = tempo.diamon.mean, +mapping = ggplot2::aes(x = X, y = Y, group = GROUP), +fill = tempo.diamon.mean[, "COLOR"], +color = hsv(0, 0, 0, alpha = box.alpha), # outline of the polygon in black but with alpha +size = box.line.size * 2, +alpha = box.alpha +)) +coord.names <- c(coord.names, "mean") +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = if(box.notch == FALSE){X_BOX_INF}else{X_NOTCH_INF}, xend = if(box.notch == FALSE){X_BOX_SUP}else{X_NOTCH_SUP}, y = MEDIAN, yend = MEDIAN, group = categ[length(categ)]), color = "black", size = box.line.size * 2, alpha = box.alpha)) # +coord.names <- c(coord.names, "median") +} +# end boxplot display before dot display if box.fill = TRUE + + + + + + +# dot display +if( ! is.null(dot.color)){ +if(dot.tidy == FALSE){ +if(is.null(dot.categ)){ +if(dot.border.size == 0){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point( +data = dot.coord.rd3, +mapping = ggplot2::aes_string(x = "dot.x", y = "y", group = categ[length(categ)]), +size = dot.size, +shape = 19, +color = dot.coord.rd3$dot.color, +alpha = dot.alpha +)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic +}else{ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point( +data = dot.coord.rd3, +mapping = ggplot2::aes_string(x = "dot.x", y = "y", group = categ[length(categ)]), +shape = 21, +stroke = dot.border.size, +color = if(is.null(dot.border.color)){dot.coord.rd3$dot.color}else{rep(dot.border.color, nrow(dot.coord.rd3))}, +size = dot.size, +fill = dot.coord.rd3$dot.color, +alpha = dot.alpha +)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic +} +}else{ +if(dot.border.size == 0){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point( +data = dot.coord.rd3, +mapping = ggplot2::aes_string(x = "dot.x", y = "y", alpha = dot.categ), +size = dot.size, +shape = 19, +color = dot.coord.rd3$dot.color +)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic +}else{ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point( +data = dot.coord.rd3, +mapping = ggplot2::aes_string(x = "dot.x", y = "y", alpha = dot.categ), +size = dot.size, +shape = 21, +stroke = dot.border.size, +color = if(is.null(dot.border.color)){dot.coord.rd3$dot.color}else{rep(dot.border.color, nrow(dot.coord.rd3))}, +fill = dot.coord.rd3$dot.color +)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = dot.categ.legend.name, values = rep(dot.alpha, length(dot.categ.class.order)), guide = ggplot2::guide_legend(override.aes = list(fill = dot.color, color = if(is.null(dot.border.color)){dot.color}else{dot.border.color}, stroke = dot.border.size, alpha = dot.alpha)))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +} +coord.names <- c(coord.names, "dots") +}else if(dot.tidy == TRUE){ +# here plot using group -> no scale +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_dotplot( +data = dot.coord, +mapping = ggplot2::aes_string(x = categ[1], y = "y", group = "group"), # not dot.categ here because the classes of dot.categ create new separations +position = ggplot2::position_dodge(width = box.width), +binaxis = "y", +stackdir = "center", +alpha = dot.alpha, +fill = dot.coord$dot.color, +stroke = dot.border.size, +color = if(is.null(dot.border.color)){dot.coord$dot.color}else{rep(dot.border.color, nrow(dot.coord))}, +show.legend = FALSE, # BEWARE: do not use show.legend = TRUE because it uses the arguments outside aes() as aesthetics (here color and fill). Thus I must find a way using ggplot2::scale_discrete_manual() +binwidth = (y.lim[2] - y.lim[1]) / dot.tidy.bin.nb +)) # geom_dotplot ggplot2 v3.3.0: I had to remove rev() in fill and color # very weird behavior of geom_dotplot ggplot2 v3.2.1, (1) because with aes group = (to avoid legend), the dot plotting is not good in term of coordinates, and (2) because data1 seems reorderer according to x = categ[1] before plotting. Thus, I have to use fill = dot.coord[rev(order(dot.coord[, categ[1]], decreasing = TRUE)), "dot.color"] to have the good corresponding colors # show.legend option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, "dots") +if( ! is.null(dot.categ)){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_dotplot( +data = dot.coord, +mapping = ggplot2::aes_string(x = categ[1], y = "y", alpha = dot.categ), # not dot.categ here because the classes of dot.categ create new separations +position = ggplot2::position_dodge(width = box.width), +binaxis = "y", +stackdir = "center", +fill = NA, +stroke = NA, +color = NA, +# BEWARE: do not use show.legend = TRUE because it uses the arguments outside aes() as aesthetics (here color and fill). Thus I must find a way using ggplot2::scale_discrete_manual() +binwidth = (y.lim[2] - y.lim[1]) / dot.tidy.bin.nb +)) # geom_dotplot ggplot2 v3.3.0: I had to remove rev() in fill and color # very weird behavior of geom_dotplot ggplot2 v3.2.1, (1) because with aes group = (to avoid legend), the dot plotting is not good in term of coordinates, and (2) because data1 seems reorderer according to x = categ[1] before plotting. Thus, I have to use fill = dot.coord[rev(order(dot.coord[, categ[1]], decreasing = TRUE)), "dot.color"] to have the good corresponding colors # show.legend option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "linetype", name = dot.categ.legend.name, values = rep(1, length(categ.color)))) # values = rep("black", length(categ.color)) are the values of color (which is the border color of dots), and this modify the border color on the plot. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +coord.names <- c(coord.names, "bad_remove") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = dot.categ.legend.name, values = rep(dot.alpha, length(dot.categ.class.order)), labels = dot.categ.class.order, guide = ggplot2::guide_legend(title = if(ini.dot.categ == categ[length(categ)]){dot.categ}else{ini.dot.categ}, override.aes = list(fill = levels(dot.coord$dot.color), color = if(is.null(dot.border.color)){levels(dot.coord$dot.color)}else{dot.border.color}, stroke = dot.border.size, alpha = dot.alpha)))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +} +# coordinates of tidy dots +tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$data # to have the tidy dot coordinates +if(length(which(sapply(tempo.coord, FUN = nrow) == nrow(data1))) > if(is.null(dot.categ)){1}else{2}){ # if(is.null(dot.categ)){1}else{2} because 1 dotplot if dot.categ is NULL and 2 dotplots is not, with the second being a blank dotplot with wrong coordinates. Thus take the first in that situation +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nMORE THAN ", if(is.null(dot.categ)){1}else{2}, " COMPARTMENT WITH NROW EQUAL TO nrow(data1) IN THE tempo.coord LIST (FOR TIDY DOT COORDINATES). CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +dot.coord.tidy1 <- tempo.coord[[which(sapply(tempo.coord, FUN = nrow) == nrow(data1))[1]]] # the second being a blank dotplot with wrong coordinates. Thus take the first whatever situation +} +tempo.box.coord <- merge(box.coord, unique(dot.coord[, c("PANEL", "group", categ)]), by = c("PANEL", "group"), sort = FALSE) # do not add dot.categ and tidy_group_coord here because the coordinates are for stats. Add the categ in box.coord. BEWARE: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in box.coord. Thus, no need to consider fill column +# below inactivated because not true when dealing with dot.categ different from categ +if(nrow(tempo.box.coord) != nrow(box.coord)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT tempo.box.coord DATA FRAME. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +dot.coord.tidy2 <- merge(dot.coord.tidy1, tempo.box.coord[c("fill", "PANEL", "group", "x", categ)], by = c("PANEL", "group"), sort = FALSE) # send the coord of the boxs into the coord data.frame of the dots (in the column x.y).BEWARE: by = c("PANEL", "group") without fill column because PANEL & group columns are enough as only one value of x column per group number in tempo.box.coord. Thus, no need to consider fill colum # DANGER: from here the fill.y and x.y (from tempo.box.coord) are not good in dot.coord.tidy2. It is ok because Group1 Group2 from tempo.box.coord are ok with the group column from dot.coord.tidy1. This is due to the fact that dot.coord.tidy resulting from geom_dotplot does not make the same groups as the other functions +if(nrow(dot.coord.tidy2) != nrow(dot.coord)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.tidy2 DATA FRAME. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +# From here, check for dot.coord.tidy3 which wil be important for stat over the plot. BEWARE: dot.categ has nothing to do here for stat coordinates. Thus, not in tempo.data1 +if(length(categ) == 1){ +tempo.data1 <- unique(data.frame(data1[categ[1]], group = as.integer(data1[, categ[1]]))) # categ[1] is factor +names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check") +verif <- paste0(categ[1], ".check") +}else if(length(categ) == 2){ +tempo.data1 <- unique( +data.frame( +data1[c(categ[1], categ[2])], +group = as.integer(factor(paste0( +formatC(as.integer(data1[, categ[2]]), width = nchar(max(as.integer(data1[, categ[2]]), na.rm = TRUE)), flag = "0"), # convert factor into numeric with leading zero for proper ranking +".", +formatC(as.integer(data1[, categ[1]]), width = nchar(max(as.integer(data1[, categ[1]]), na.rm = TRUE)), flag = "0")# convert factor into numeric with leading zero for proper ranking +))) # merge the 2 formatC() to create a new factor. The convertion to integer should recreate the correct group number +) +) # categ[2] first if categ[2] is used to make the categories in ggplot and categ[1] is used to make the x-axis +names(tempo.data1)[names(tempo.data1) == categ[1]] <- paste0(categ[1], ".check") +names(tempo.data1)[names(tempo.data1) == categ[2]] <- paste0(categ[2], ".check") +verif <- c(paste0(categ[1], ".check"), paste0(categ[2], ".check")) +}else{ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 7\n\n============\n\n") +stop(tempo.cat) +} +dot.coord.tidy3 <- merge(dot.coord.tidy2, tempo.data1, by = intersect("group", "group"), sort = FALSE) # send the factors of data1 into coord. BEWARE: I have tested intersect("group", "group") instead of by = "group". May be come back to by = "group" in case of error. But I did this because of an error in dot.coord.rd3 above +if(nrow(dot.coord.tidy3) != nrow(dot.coord) | ( ! fun_comp_2d(dot.coord.tidy3[categ], dot.coord.tidy3[verif])$identical.content)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nTHE merge() FUNCTION DID NOT RETURN A CORRECT dot.coord.tidy3 DATA FRAME. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +# end coordinates of tidy dots +} +} +# end dot display + + + +# boxplot display (if box.fill = FALSE, otherwise, already plotted above) +if(box.fill == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = categ.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color})) #, guide = ggplot2::guide_legend(override.aes = list(fill = levels(tempo.polygon$COLOR), color = "black")))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = categ.legend.name, values = rep(hsv(0, 0, 0, alpha = box.alpha), length(unique(data1[, categ[length(categ)]]))))) # , guide = ggplot2::guide_legend(override.aes = list(color = "black", alpha = box.alpha)))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor # outline of the polygon in black but with alpha +}else{ +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_boxplot(data = data1, mapping = ggplot2::aes_string(x = categ[1], y = y, color = categ[length(categ)], fill = categ[length(categ)]), position = ggplot2::position_dodge(width = NULL), width = box.width, size = box.line.size, notch = box.notch, alpha = box.alpha, coef = if(box.whisker.kind == "no"){0}else if(box.whisker.kind == "std"){1.5}else if(box.whisker.kind == "max"){Inf}, outlier.shape = if( ! is.null(dot.color)){NA}else{21}, outlier.color = if( ! is.null(dot.color)){NA}else{if(dot.border.size == 0){NA}else{dot.border.color}}, outlier.fill = if( ! is.null(dot.color)){NA}else{NULL}, outlier.size = if( ! is.null(dot.color)){NA}else{dot.size}, outlier.stroke = if( ! is.null(dot.color)){NA}else{dot.border.size}, outlier.alpha = if( ! is.null(dot.color)){NA}else{dot.alpha})) # the color, size, etc. of the outliers are dealt here. outlier.color = NA to do not plot outliers when dots are already plotted +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_path( +data = tempo.polygon, +mapping = ggplot2::aes_string(x = "X", y = "Y", group = "BOX", color = categ[length(categ)]), +size = box.line.size, +alpha = box.alpha, +lineend = "round", +linejoin = "round" +)) +coord.names <- c(coord.names, "main.box") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = if(box.notch == FALSE){X_BOX_INF}else{X_NOTCH_INF}, xend = if(box.notch == FALSE){X_BOX_SUP}else{X_NOTCH_SUP}, y = MEDIAN, yend = MEDIAN, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size * 2, alpha = box.alpha)) # +coord.names <- c(coord.names, "median") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = QUART3, yend = MAX, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha)) # +coord.names <- c(coord.names, "sup.whisker") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X, xend = X, y = QUART1, yend = MIN, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha)) # +coord.names <- c(coord.names, "inf.whisker") +if(box.whisker.width > 0){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = MAX, yend = MAX, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha, lineend = "round")) # +coord.names <- c(coord.names, "sup.whisker.edge") +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_segment(data = stat, mapping = ggplot2::aes(x = X_WHISK_INF, xend = X_WHISK_SUP, y = MIN, yend = MIN, group = categ[length(categ)]), color = stat$COLOR, size = box.line.size, alpha = box.alpha, lineend = "round")) # +coord.names <- c(coord.names, "inf.whisker.edge") +} +if(box.mean == TRUE){ +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_point(data = stat, mapping = ggplot2::aes_string(x = "X", y = "MEAN", group = categ[length(categ)]), shape = 23, stroke = box.line.size * 2, color = stat$COLOR, size = box.mean.size, fill = NA, alpha = box.alpha)) # group used in aesthetic to do not have it in the legend. Here ggplot2::scale_discrete_manual() cannot be used because of the group easthetic +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::geom_path( +data = tempo.diamon.mean, +mapping = ggplot2::aes(x = X, y = Y, group = GROUP), +color = tempo.diamon.mean[, "COLOR"], +size = box.line.size * 2, +alpha = box.alpha, +lineend = "round", +linejoin = "round" +)) +coord.names <- c(coord.names, "mean") +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "fill", name = categ.legend.name, values = rep(NA, length(unique(data1[, categ[length(categ)]]))))) #, guide = ggplot2::guide_legend(override.aes = list(color = categ.color)))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "color", name = categ.legend.name, values = if(length(categ.color) == 1){rep(categ.color, length(unique(data1[, categ[length(categ)]])))}else{categ.color}, guide = ggplot2::guide_legend(override.aes = list(alpha = if(plot == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){1}else{box.alpha})))) # , guide = ggplot2::guide_legend(override.aes = list(color = as.character(categ.color))))) # values are the values of color (which is the border color in geom_box. BEWARE: values = categ.color takes the numbers to make the colors if categ.color is a factor +if(plot == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1 +# to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") FROM FUNCTION ", function.name, ": GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +# end boxplot display (if box.fill = FALSE, otherwise, already plotted above) + + + + +# stat display +# layer after dots but ok, behind dots on the plot +if( ! is.null(stat.disp)){ +if(stat.disp == "top"){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "text", x = stat$X, y = y.lim[2], label = if(stat.disp.mean == FALSE){fun_round(stat$MEDIAN, 2)}else{fun_round(stat$MEAN, 2)}, size = stat.size, color = "black", hjust = ifelse(vertical == TRUE, 0.5, 1.1), vjust = ifelse(vertical == TRUE, 1.1, 0.5))) # beware: no need of order() for labels because box.coord$x set the order. For justification, see https://stackoverflow.com/questions/7263849/what-do-hjust-and-vjust-do-when-making-a-plot-using-ggplot +coord.names <- c(coord.names, "stat.display") +}else if(stat.disp == "above"){ +# stat coordinates +if( ! is.null(dot.color)){ # for text just above max dot +if(dot.tidy == FALSE){ +tempo.stat.ini <- dot.coord.rd3 +}else if(dot.tidy == TRUE){ +tempo.stat.ini <- dot.coord.tidy3 +tempo.stat.ini$x.y <- tempo.stat.ini$x.x # this is just to be able to use tempo.stat.ini$x.y for untidy or tidy dots (remember that dot.coord.tidy3$x.y is not good, see above) +} +stat.coord1 <- aggregate(x = tempo.stat.ini["y"], by = {x.env <- if(length(categ) == 1){list(tempo.stat.ini$group, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]])}else if(length(categ) == 2){list(tempo.stat.ini$group, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]], tempo.stat.ini[, categ[2]])} ; names(x.env) <- if(length(categ) == 1){c("group", "x.y", categ[1])}else if(length(categ) == 2){c("group", "x.y", categ[1], categ[2])} ; x.env}, FUN = min, na.rm = TRUE) +names(stat.coord1)[names(stat.coord1) == "y"] <- "dot.min" +stat.coord2 <- aggregate(x = tempo.stat.ini["y"], by = {x.env <- if(length(categ) == 1){list(tempo.stat.ini$group, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]])}else if(length(categ) == 2){list(tempo.stat.ini$group, tempo.stat.ini$x.y, tempo.stat.ini[, categ[1]], tempo.stat.ini[, categ[2]])} ; names(x.env) <- if(length(categ) == 1){c("group", "x.y", categ[1])}else if(length(categ) == 2){c("group", "x.y", categ[1], categ[2])} ; x.env}, FUN = max, na.rm = TRUE) +names(stat.coord2) <- paste0(names(stat.coord2), "_from.dot.max") +names(stat.coord2)[names(stat.coord2) == "y_from.dot.max"] <- "dot.max" +stat.coord3 <- cbind(box.coord[order(box.coord$x), ], stat.coord1[order(stat.coord1$x.y), ], stat.coord2[order(stat.coord2$x.y), ]) # should be ok to use box.coord$x and stat.coord$x.y to assemble the two data frames because x coordinates of the boxs. Thus, we cannot have identical values +if( ! all(identical(round(stat.coord3$x, 9), round(stat.coord3$x.y, 9)))){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nFUSION OF box.coord, stat.coord1 AND stat.coord2 ACCORDING TO box.coord$x, stat.coord1$x.y AND stat.coord2$x.y IS NOT CORRECT. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +} +text.coord <- stat.coord3[, c("x", "group", "dot.min", "dot.max")] +names(text.coord)[names(text.coord) == "dot.min"] <- "text.min.pos" +names(text.coord)[names(text.coord) == "dot.max"] <- "text.max.pos" +box.coord <- box.coord[order(box.coord$x), ] +text.coord <- text.coord[order(text.coord$x), ] # to be sure to have the two objects in the same order for x. BEWARE: cannot add identical(as.integer(text.coord$group), as.integer(box.coord$group)) because with error, the correspondence between x and group is not the same +if( ! identical(text.coord$x, box.coord$x)){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\ntext.coord AND box.coord DO NOT HAVE THE SAME x COLUMN CONTENT\n\n============\n\n") +stop(tempo.cat) +} +} +# end stat coordinates +# stat display +# performed twice: first for y values >=0, then y values < 0, because only a single value allowed for hjust anf vjust +if(stat.disp.mean == FALSE){ +tempo.log.high <- if(diff(y.lim) > 0){box.coord$middle >= 0}else{box.coord$middle < 0} +tempo.log.low <- if(diff(y.lim) > 0){box.coord$middle < 0}else{box.coord$middle >= 0} +}else{ +tempo.log.high <- if(diff(y.lim) > 0){box.coord$MEAN >= 0}else{box.coord$MEAN < 0} +tempo.log.low <- if(diff(y.lim) > 0){box.coord$MEAN < 0}else{box.coord$MEAN >= 0} +} +if(any(tempo.log.high) == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate( +geom = "text", +x = get(if(is.null(dot.color)){"box.coord"}else{"text.coord"})$x[tempo.log.high], # get(if(is.null(dot.color)){"box.coord"}else{"text.coord"}) for text just above error boxs or dots +y = get(if(is.null(dot.color)){"box.coord"}else{"text.coord"})[tempo.log.high, if(is.null(dot.color)){"middle"}else{"text.max.pos"}], +label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[tempo.log.high]}else{fun_round(box.coord$MEAN, 2)[tempo.log.high]}, +size = stat.size, +color = "black", +hjust = ifelse(vertical == TRUE, 0.5, 0.5 - stat.dist), +vjust = ifelse(vertical == TRUE, 0.5 - stat.dist, 0.5) +)) # beware: no need of order() for labels because box.coord$x set the order +} +if(any(tempo.log.low) == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate( +geom = "text", +x = get(if(is.null(dot.color)){"box.coord"}else{"text.coord"})$x[tempo.log.low], # get(if(is.null(dot.color)){"box.coord"}else{"text.coord"}) for text just above error boxs or dots +y = get(if(is.null(dot.color)){"box.coord"}else{"text.coord"})[tempo.log.low, if(is.null(dot.color)){"middle"}else{"text.min.pos"}], +label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[tempo.log.low]}else{fun_round(box.coord$MEAN, 2)[tempo.log.low]}, +size = stat.size, +color = "black", +hjust = ifelse(vertical == TRUE, 0.5, 0.5 + stat.dist), +vjust = ifelse(vertical == TRUE, 0.5 + stat.dist, 0.5) +)) # beware: no need of order() for labels because box.coord$x set the order +} +# end stat display +coord.names <- c(coord.names, "stat.display.positive", "stat.display.negative") +}else{ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 9\n\n============\n\n") +stop(tempo.cat) +} +} +# end stat display + + + +# y scale management (cannot be before dot plot management) +# the rescaling aspect is complicated and not intuitive. See: +# explaination: https://github.com/tidyverse/ggplot2/issues/3948 +# the oob argument of scale_y_continuous() https://ggplot2.tidyverse.org/reference/scale_continuous.html +# see also https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf +# secondary ticks +tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + if(vertical == TRUE){ggplot2::coord_cartesian(ylim = if(diff(y.lim) < 0){rev(y.lim)}else{y.lim})}else{ggplot2::coord_flip(ylim = y.lim)}'))))$layout$panel_params[[1]] +# y.inter.tick.positions: coordinates of secondary ticks (only if y.inter.tick.nb argument is non NULL or if y.log argument is different from "no") +if(y.log != "no"){ # integer main ticks for log2 and log10 +tempo.scale <- (as.integer(min(y.lim, na.rm = TRUE)) - 1):(as.integer(max(y.lim, na.rm = TRUE)) + 1) +}else{ +tempo <- if(is.null(attributes(tempo.coord$y$breaks))){tempo.coord$y$breaks}else{unlist(attributes(tempo.coord$y$breaks))} +if(all(is.na(tempo))){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nONLY NA IN tempo.coord$y$breaks\n\n============\n\n") +stop(tempo.cat) +} +tempo.scale <- fun_scale(lim = y.lim, n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) # in ggplot 3.3.0, tempo.coord$y.major_source replaced by tempo.coord$y$breaks. If fact: n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) replaced by n = ifelse(is.null(y.tick.nb), 4, y.tick.nb)) +} +y.inter.tick.values <- NULL +y.inter.tick.pos <- NULL +if(y.log != "no"){ +tempo <- fun_inter_ticks(lim = y.lim, log = y.log) +y.inter.tick.values <- tempo$values +y.inter.tick.pos <- tempo$coordinates +# if(vertical == TRUE){ # do not remove in case the bug is fixed +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", y = y.inter.tick.pos, yend = y.inter.tick.pos, x = tempo.coord$x.range[1], xend = tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80)) +# }else{ # not working because of the ggplot2 bug +# assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", x = y.inter.tick.pos, xend = y.inter.tick.pos, y = tempo.coord$y.range[1], yend = tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80)) +# } +coord.names <- c(coord.names, "y.inter.tick.positions") +}else if(( ! is.null(y.inter.tick.nb)) & y.log == "no"){ +# if(y.inter.tick.nb > 0){ #inactivated because already checked before +tempo <- fun_inter_ticks(lim = y.lim, log = y.log, breaks = tempo.scale, n = y.inter.tick.nb) +y.inter.tick.values <- tempo$values +y.inter.tick.pos <- tempo$coordinates +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate( +geom = "segment", +y = y.inter.tick.pos, +yend = y.inter.tick.pos, +x = if(vertical == TRUE){tempo.coord$x.range[1]}else{tempo.coord$y.range[1]}, +xend = if(vertical == TRUE){tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80}else{tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80} +)) +coord.names <- c(coord.names, "y.inter.tick.positions") +} +# end secondary ticks +# for the ggplot2 bug with y.log, this does not work: eval(parse(text = ifelse(vertical == FALSE & y.log == "log10", "ggplot2::scale_x_continuous", "ggplot2::scale_y_continuous"))) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_y_continuous( +breaks = tempo.scale, +minor_breaks = y.inter.tick.pos, +labels = if(y.log == "log10"){scales::trans_format("identity", scales::math_format(10^.x))}else if(y.log == "log2"){scales::trans_format("identity", scales::math_format(2^.x))}else if(y.log == "no"){ggplot2::waiver()}else{tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, "\nCODE INCONSISTENCY 10\n\n============\n\n") ; stop(tempo.cat)}, +expand = c(0, 0), # remove space after after axis limits +limits = sort(y.lim), # NA indicate that limits must correspond to data limits but ylim() already used +oob = scales::rescale_none, +trans = ifelse(diff(y.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_y_reverse() but create the problem of y-axis label disappearance with y.lim decreasing. Thus, do not use. Use ylim() below and after this +)) +if(vertical == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_cartesian(ylim = y.lim)) #problem of ggplot2::ylim() is taht it redraw new breaks # coord_cartesian(ylim = y.lim)) not used because bug -> y-axis label disappearance with y.lim decreasing # clip = "off" to have secondary ticks outside plot region does not work +}else{ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_flip(ylim = y.lim)) # clip = "off" to have secondary ticks outside plot region does not work # create the problem of y-axis label disappearance with y.lim decreasing + +} +# end y scale management (cannot be before dot plot management) + + + +# legend management +if( ! is.null(legend.width)){ +legend.final <- get_legend_fun(myggplot = tempo.coord, function.name = function.name) # get legend +} +# end legend management + + +# drawing +fin.plot <- suppressMessages(suppressWarnings(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))) +if(plot == TRUE){ +# following lines inactivated because of problem in warn.recov and message.recov +# assign("env_fun_get_message", new.env()) +# assign("tempo.gg.name", tempo.gg.name, envir = env_fun_get_message) +# assign("tempo.gg.count", tempo.gg.count, envir = env_fun_get_message) +# assign("add", add, envir = env_fun_get_message) +# two next line: for the moment, I cannot prevent the warning printing +# warn.recov <- fun_get_message(paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add}), kind = "warning", header = FALSE, print.no = FALSE, env = env_fun_get_message) # for recovering warnings printed by ggplot() functions +# message.recov <- fun_get_message('print(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add}))))', kind = "message", header = FALSE, print.no = FALSE, env = env_fun_get_message) # for recovering messages printed by ggplot() functions +if(is.null(legend.width)){ +suppressMessages(suppressWarnings(print(fin.plot))) +}else{ +suppressMessages(suppressWarnings(gridExtra::grid.arrange(fin.plot, legend.final, ncol=2, widths=c(1, legend.width)))) +} +# suppressMessages(suppressWarnings(print(eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), if(is.null(add)){NULL}else{add})))))) +}else{ +# following lines inactivated because of problem in warn.recov and message.recov +# message.recov <- NULL +# warn.recov <- NULL +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") PLOT NOT SHOWN AS REQUESTED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end drawing + + + +# outputs +# following lines inactivated because of problem in warn.recov and message.recov +# if( ! (is.null(warn) & is.null(warn.recov) & is.null(message.recov))){ +# warn <- paste0(warn, "\n\n", if(length(warn.recov) > 0 | length(message.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", ifelse( ! is.null(warn.recov), unique(message.recov), ""), ifelse( ! is.null(message.recov), unique(message.recov), ""), collapse = "\n\n"), "\n\n")}) +# }else if( ! (is.null(warn) & is.null(warn.recov)) & is.null(message.recov)){ +# warn <- paste0(warn, "\n\n", if(length(warn.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", unique(warn.recov), collapse = "\n\n"), "\n\n")}) +# }else if( ! (is.null(warn) & is.null(message.recov)) & is.null(warn.recov)){ +# warn <- paste0(warn, "\n\n", if(length(message.recov) > 0){paste0(paste0("MESSAGES FROM ggplot2 FUNCTIONS: ", unique(message.recov), collapse = "\n\n"), "\n\n")}) +# } +if(warn.print == TRUE & ! is.null(warn)){ +warning(paste0("FROM ", function.name, " FUNCTION:\n\n", warn), call. = FALSE) # to recover the warning messages, use return = TRUE +} +if(return == TRUE){ +tempo.output <- ggplot2::ggplot_build(fin.plot) +tempo.output$data <- tempo.output$data[-1] # remove the first data because corresponds to the initial empty boxplot +if(length(tempo.output$data) != length(coord.names)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, "\nlength(tempo.output$data) AND length(coord.names) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +names(tempo.output$data) <- coord.names +tempo.output$data <- tempo.output$data[coord.names != "bad_remove"] +} +tempo <- tempo.output$layout$panel_params[[1]] +output <- list( +data = data1, +stat = stat, +removed.row.nb = removed.row.nb, +removed.rows = removed.rows, +plot = c(tempo.output$data, y.inter.tick.values = list(y.inter.tick.values)), +panel = facet.categ, +axes = list( +x.range = tempo$x.range, +x.labels = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{tempo$x$scale$get_labels()}, # is.null(attributes(tempo$x$breaks)) test if it is number (TRUE) or character (FALSE) +x.positions = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{unlist(attributes(tempo$x$breaks))}, +y.range = tempo$y.range, +y.labels = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{tempo$y$scale$get_labels()}, +y.positions = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{unlist(attributes(tempo$y$breaks))} +), +warn = paste0("\n", warn, "\n\n"), +ggplot = if(return.ggplot == TRUE){fin.plot}else{NULL} # fin.plot plots the graph if return == TRUE +) +return(tempo <- output) +} +# end outputs +# end main code +} + + + + + + + + + +# add return.ggplot = FALSE, from boxplot +# add facet from boxplot if data1 is a dataframe or list of length 1 +# error to fix: 1) accept integers as color, 2) fun_scale but xhuld be ok when importing the job from boxplot + +fun_gg_scatter <- function( +data1, +x, +y, +categ = NULL, +legend.name = NULL, +color = NULL, +geom = "geom_point", +alpha = 0.5, +dot.size = 2, +line.size = 0.5, +x.lim = NULL, +x.lab = NULL, +x.log = "no", +x.tick.nb = NULL, +x.inter.tick.nb = NULL, +x.include.zero = FALSE, +x.left.extra.margin = 0.05, +x.right.extra.margin = 0.05, +x.text.angle = 0, +y.lim = NULL, +y.lab = NULL, +y.log = "no", +y.tick.nb = NULL, +y.inter.tick.nb = NULL, +y.include.zero = FALSE, +y.top.extra.margin = 0.05, +y.bottom.extra.margin = 0.05, +y.text.angle = 0, +text.size = 12, +title = "", +title.text.size = 12, +legend.show = TRUE, +legend.width = 0.5, +raster = FALSE, +raster.ratio = 1, +raster.threshold = NULL, +article = TRUE, +grid = FALSE, +return = FALSE, +plot = TRUE, +add = NULL, +warn.print = TRUE, +lib.path = NULL +){ +# AIM +# ggplot2 scatterplot with the possibility to overlay dots from up to 3 different data frames (-> three different legends) and lines from up to 3 different data frames (-> three different legends) -> up to 6 overlays totally +# for ggplot2 specifications, see: https://ggplot2.tidyverse.org/articles/ggplot2-specs.html +# WARNINGS +# rows containing NA in data1[, c(y, categ)] will be removed before processing, with a warning (see below) +# ARGUMENTS +# data1: a dataframe compatible with ggplot2, or a list of data frames +# x: character string of the data1 column name for x-axis. If data1 is a list, then x must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Write NULL for each "geom_hline" in geom argument +# y: character string of the data1 column name for y-axis. If data1 is a list, then y must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Write NULL for each "geom_vline" in geom argument +# categ: character string of the data1 column name for categories. If categ == NULL, no categories -> no legend displayed. If data1 is a list, then categ must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the list compartments can be NULL, and other not +# legend.name: character string of the legend title. If legend.name == NULL and categ != NULL, then legend.name <- categ. If data1 is a list, then legend.name must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the list compartments can be NULL, and other not # add with other legends below +# color: vector of character string of the colors of categ arguments. If color == NULL, default colors of ggplot2. If non null, it can be either: (1) a single color string (all the dots of the corresponding data1 will have this color, whatever categ NULL or not), (2) if categ non null, a vector of string colors, one for each class of categ (each color will be associated according to the alphabetical order of categ classes), (3) if categ non null, a vector or factor of string colors, like if it was one of the column of data1 data frame (beware: a single color per class of categ and a single class of categ per color must be respected). Integers are also accepted instead of character strings, as long as above rules about length are respected. Integers will be processed by fun_gg_palette() using the max integer value among all the integers in color. If data1 is a list, then color must be a list of character strings or integers, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. Some of the compartments can be NULL. In that case, a different grey color will be used for each NULL compartment +# geom: character string of the kind of plot. Either "geom_point" (scatterplot), "geom_line" (coordinates plotted then line connection from the lowest to highest coordinates), "geom_path" (line connection respecting the order in data1), "geom_hline" (horizontal line) or "geom_vline" (vertical line). BEWARE: for "geom_hline" or "geom_vline", (1) x or y argument must be NULL, respectively, (2) x.lim or y.lim argument must NOT be NULL, respectively, if only these kind of lines are drawn (if other geom present, then x.lim = NULL and y.lim = NULL will generate x.lim and y.lim defined by these other geom, which is not possible with "geom_hline" or "geom_vline"), (3) the function will draw n lines for n values in the x argument column name of the data1 data frame. If several colors required, the categ argument must be specified and the corresponding categ column name must exist in the data1 data frame with a different class name for each row. If data1 is a list, then geom must be a list of character strings, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. +# alpha: numeric value (from 0 to 1) of transparency. If data1 is a list, then alpha must be a list of numeric value, of same size as data1, with compartment 1 related to compartment 1 of data1, etc. +# dot.size: numeric value of point size +# line.size: numeric value of line size +# x.lim: 2 numeric values for x-axis range. If NULL, range of x in data1. Order of the 2 values matters (for inverted axis). BEWARE: values of the x.lim must be already in the corresponding log if x.log argument is not "no" (see below) +# x.lab: a character string or expression for x-axis legend. If NULL, x of the first data frame in data1. Warning message if the elements in x are different between data frames in data1 +# x.log: Either "no" (values in the x argument column of the data1 data frame are not log), "log2" (values in the x argument column of the data1 data frame are log2 transformed) or "log10" (values in the x argument column of the data1 data frame are log10 transformed). BEWARE: the function does not tranform the data, but just displays ticks in a log scale manner. Thus, negative or zero values are allowed +# x.tick.nb: approximate number of desired label values on the x-axis (n argument of the fun_scale() function). If NULL, the number is managed by ggplot2 +# x.inter.tick.nb: number of desired secondary ticks between main ticks. Ignored if x.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$x.second.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks +# x.include.zero: logical. Does x.lim range include 0? Ok even if x.log == TRUE because x, and thus x.lim, must already be log transformed values +# x.left.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to x.lim. If different from 0, add the range of the axis * x.left.extra.margin (e.g., abs(x.lim[2] - x.lim[1]) * x.left.extra.margin) to the left of x-axis +# x.right.extra.margin: idem as x.left.extra.margin but to the bottom of x-axis +# x.text.angle: integer value of the text angle for the x-axis labels. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc. +# y.lim: 2 numeric values for y-axis range. If NULL, range of y in data1. Order of the 2 values matters (for inverted axis). BEWARE: values of the y.lim must be already in the corresponding log if y.log argument is not "no" (see below) +# y.lab: a character string or expression for y-axis legend. If NULL, y of the first data frame in data1. Warning message if the elements in y are different between data frames in data1 +# y.log: Either "no" (values in the y argument column of the data1 data frame are not log), "log2" (values in the y argument column of the data1 data frame are log2 transformed) or "log10" (values in the y argument column of the data1 data frame are log10 transformed). BEWARE: the function does not tranform the data, but just displays ticks in a log scale manner. Thus, negative or zero values are allowed +# y.tick.nb: approximate number of desired label values on the y-axis (n argument of the fun_scale() function). If NULL, the number is managed by ggplot2 +# y.inter.tick.nb: number of desired secondary ticks between main ticks. Ignored if y.log is other than "no" (log scale plotted). Use argument return = TRUE and see $plot$y.second.tick.values to have the values associated to secondary ticks. IF NULL, no secondary ticks +# y.include.zero: logical. Does y.lim range include 0? Ok even if y.log == TRUE because y, and thus y.lim, must already be log transformed values +# y.left.extra.margin: single proportion (between 0 and 1) indicating if extra margins must be added to y.lim. If different from 0, add the range of the axis * y.left.extra.margin (e.g., abs(y.lim[2] - y.lim[1]) * y.left.extra.margin) to the left of y-axis +# y.right.extra.margin: idem as y.left.extra.margin but to the bottom of y-axis +# y.text.angle: integer value of the text angle for the y-axis labels. Positive values for counterclockwise rotation: 0 for horizontal, 90 for vertical, 180 for upside down etc. Negative values for clockwise rotation: 0 for horizontal, -90 for vertical, -180 for upside down etc. +# text.size: numeric value of the size of the (1) axis numbers and axis legends and (2) texts in the graphic legend +# title: character string of the graph title +# title.text.size: numeric value of the title size (in points) +# legend.show: logical. Show legend? Ignored if categ argument is NULL, because this already generate no legend +# legend.width: single proportion (between 0 and 1) indicating the relative width of the legend sector (on the right of the plot) relative to the width of the plot. Value 1 means that the window device width is split in 2, half for the plot and half for the legend. Value 0 means no room for the legend which will overlay the plot region. If categ argument is NULL or legend.show argument is FALSE, an empty legend space is created, which can be useful when desiring graphs of exactly the same width, whatever they have legends or not. Write NULL to inactivate the legend sector. In such case, ggplot2 will manage the room required for the legend display, meaning that the width of the plotting region can vary between graphs, depending on the text in the legend +# raster: logical. Dots in raster mode? If FALSE, dots from each geom_point from geom argument are in vectorial mode (bigger pdf and long to display if millions of dots). If TRUE, dots from each geom_point from geom argument are in matricial mode (smaller pdf and easy display if millions of dots, but long to generate the layer). If TRUE, the raster.ratio argument is used to avoid an ellipsoid representation of the dots. If TRUE, solve the transparency problem with some GUI. Overriden by raster.threshold if non NULL +# raster.ratio: single numeric value indicating the height / width ratio of the graphic device used (for instance provided by the $dim of the output of the fun_open() function). The default value is 1 because by default R opens a square graphic device. But this argument has to be set when using other device dimensions. Ignored if raster == FALSE +# raster.threshold: positive integer value indicating the limit of the dot number above which geom_point from geom argument switch from vectorial mode to raster mode (see the raster argument). If any layer is raster, then raster.ratio argument is used to avoid an ellipsoid representation of the dots. Inactive the raster argument if non NULL +# article: logical. If TRUE, use a article theme (article like). If FALSE, use a classic related ggplot theme. Use the add argument (add = "+ggplot2::theme_classic()" for the exact classic ggplot theme +# grid: logical. Draw horizontal and vertical lines in the background to better read the values? Not considered if article == FALSE +# return: logical. Return the graph info? +# plot: logical. Plot the graphic? If FALSE and return argument is TRUE, graphical parameters and associated warnings are provided without plotting +# add: character string allowing to add more ggplot2 features (dots, lines, themes, facet, etc.). Ignored if NULL +# BEWARE: (1) the string must start with "+", (2) the string must finish with ")" and (3) each function must be preceded by "ggplot2::". Example: "+ ggplot2::coord_flip() + ggplot2::theme_bw()" +# If the character string contains the "ggplot2::theme" string, then the article argument of fun_gg_boxplot() (see above) is ignored with a warning +# Handle the add argument with caution since added functions can create conflicts with the preexisting internal ggplot2 functions +# warn.print: logical. Print warnings at the end of the execution? If TRUE, no print if no warning message generated +# lib.path: character string indicating the absolute path of the required packages (see below). if NULL, the function will use the R library default folders +# REQUIRED PACKAGES +# ggplot2 +# if raster plots are drawn (see the raster and raster.threshold arguments): +# Cairo +# grid +# REQUIRED FUNCTIONS FROM CUTE_LITTLE_R_FUNCTION +# fun_gg_empty_graph() +# fun_gg_palette() +# fun_gg_point_rast() +# fun_pack() +# fun_check() +# fun_round() +# fun_scale() +# fun_inter_ticks() +# RETURN +# a scatter plot is plot argument is TRUE +# a list of the graph info if return argument is TRUE: +# $data: the graphic info coordinates +# $removed.row.nb: a list of the removed rows numbers in data frames (because of NA). NULL if no row removed +# $removed.rows: a list of the removed rows in data frames (because of NA). NULL if no row removed +# $axes: the x-axis and y-axis info +# $warn: the warning messages. Use cat() for proper display. NULL if no warning +# EXAMPLES +# DEBUGGING +# set.seed(1) ; obs1 <- data.frame(km = rnorm(1000, 10, 3), time = rnorm(1000, 10, 3), group1 = rep(c("A1", "A2"), 500)) ; obs2 <-data.frame(km = rnorm(1000, 15, 3), time = rnorm(1000, 15, 3), group2 = rep(c("G1", "G2"), 500)) ; set.seed(NULL) ; obs1$km[2:3] <- NA ; data1 = list(L1 = obs1, L2 = obs2) ; x = list(L1 = "km", L2 = "km") ; y = list(L1 = "time", L2 = "time") ; categ = list(L1 = "group1", L2 = "group2") ; legend.name = NULL ; color = list(L1 = 4:5, L2 = 7:8) ; geom = list(L1 = "geom_point", L2 = "geom_point") ; alpha = list(L1 = 0.5, L2 = 0.5) ; dot.size = 3 ; line.size = 0.5 ; x.lim = NULL ; x.lab = "KM" ; x.log = "no" ; x.tick.nb = 10 ; x.inter.tick.nb = 1 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = c(1, 25) ; y.lab = "TIME (s)" ; y.log = "no" ; y.tick.nb = 5 ; y.inter.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = FALSE ; grid = FALSE ; raster = TRUE ; raster.ratio = 1 ; raster.threshold = NULL ; return = FALSE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL +# data1 <- list(L1 = data.frame(a = 1:6, b = (1:6)^2, group = c("A", "A", "A", "B", "B", "B")), L2 = data.frame(a = (1:6)*2, b = ((1:6)^2)*2, group = c("A1", "A1", "A1", "B1", "B1", "B1")), L3 = data.frame(a = (1:6)*3, b = ((1:6)^2)*3, group3 = c("A4", "A5", "A6", "A7", "B4", "B5"))) ; data1$L1$a[3] <- NA ; data1$L1$group[5] <- NA ; data1$L3$group3[4] <- NA ; data1 ; x = list(L1 = names(data1$L1)[1], L2 = names(data1$L2)[1], L3 = NULL) ; y = list(L1 = names(data1$L1)[2], L2 = names(data1$L2)[2], L3 = "a") ; categ = list(L1 = "group", L2 = NULL, L3 = NULL) ; legend.name = NULL ; color = NULL ; geom = list(L1 = "geom_point", L2 = "geom_point", L3 = "geom_hline") ; alpha = list(L1 = 0.5, L2 = 0.5, L3 = 0.5) ; dot.size = 1 ; line.size = 0.5 ; x.lim = c(14, 4) ; x.lab = NULL ; x.log = "log10" ; x.tick.nb = 10 ; x.inter.tick.nb = 4 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = c(60, 5) ; y.lab = NULL ; y.log = "log10" ; y.tick.nb = 10 ; y.inter.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = TRUE ; grid = FALSE ; raster = FALSE ; raster.ratio = 1 ; raster.threshold = NULL ; return = TRUE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL +# data1 <- data.frame(km = 2:7, time = (2:7)^2, group = c("A", "A", "A", "B", "B", "B")) ; data1 ; x = "km"; y = "time"; categ = "group"; legend.name = NULL ; color = NULL ; geom = "geom_point"; alpha = 0.1 ; dot.size = 1 ; line.size = 0.5 ; x.lim = c(1,10) ; x.lab = NULL ; x.log = "log10" ; x.tick.nb = 10 ; x.inter.tick.nb = 4 ; x.left.extra.margin = 0 ; x.right.extra.margin = 0 ; y.lim = NULL ; y.lab = expression(paste("TIME (", 10^-20, " s)")) ; y.log = "log10" ; y.tick.nb = 10 ; y.inter.tick.nb = 2 ; y.top.extra.margin = 0 ; y.bottom.extra.margin = 0 ; x.include.zero = TRUE ; y.include.zero = TRUE ; x.text.angle = 0 ; y.text.angle = 0 ; text.size = 12 ; title = "" ; title.text.size = 8 ; legend.show = TRUE ; legend.width = 0.5 ; article = FALSE ; grid = FALSE ; raster = FALSE ; raster.ratio = 1 ; raster.threshold = NULL ; return = FALSE ; plot = TRUE ; add = NULL ; warn.print = TRUE ; lib.path = NULL +# function name +function.name <- paste0(as.list(match.call(expand.dots=FALSE))[[1]], "()") +# end function name +# required function checking +req.function <- c( +"fun_check", +"fun_gg_just", +"fun_gg_empty_graph", +"fun_gg_palette", +"fun_gg_point_rast", +"fun_round", +"fun_pack", +"fun_scale", +"fun_inter_ticks" +) +for(i1 in req.function){ +if(length(find(i1, mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": REQUIRED ", i1, "() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +} +# end required function checking +# reserved words to avoid bugs (used in this function) +reserved.words <- c("fake_x", "fake_y", "fake_categ", "color") +# end reserved words to avoid bugs (used in this function) +# primary argument checking +arg.check <- NULL # +text.check <- NULL # +checked.arg.names <- NULL # for function debbuging: used by r_debugging_tools +ee <- expression(arg.check <- c(arg.check, tempo$problem) , text.check <- c(text.check, tempo$text) , checked.arg.names <- c(checked.arg.names, tempo$fun.name)) +tempo1 <- fun_check(data = data1, class = "data.frame", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = data1, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": data1 ARGUMENT MUST BE A DATA FRAME OR A LIST OF DATA FRAMES") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +if( ! is.null(x)){ +tempo1 <- fun_check(data = x, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = x, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": x ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(y)){ +tempo1 <- fun_check(data = y, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = y, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": y ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(categ)){ +tempo1 <- fun_check(data = categ, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = categ, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": categ ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(legend.name)){ +tempo1 <- fun_check(data = legend.name, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = legend.name, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": legend.name ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(color)){ +tempo1 <- fun_check(data = color, class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = color, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": color ARGUMENT MUST BE A VECTOR OF CHARACTER STRING OR A LIST OF CHARACTER VECTORS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(geom)){ +tempo1 <- fun_check(data = geom, class = "vector", mode = "character", na.contain = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = geom, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": geom ARGUMENT MUST BE A SINGLE CHARACTER STRING OR A LIST OF CHARACTER STRINGS") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo1 <- fun_check(data = alpha, prop = TRUE, length = 1, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = alpha, class = "list", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("ERROR IN ", function.name, ": alpha ARGUMENT MUST BE A SINGLE NUMERIC VALUE BETWEEN 0 AND 1 OR A LIST OF SUCH VALUES") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +tempo <- fun_check(data = dot.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = line.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +if( ! is.null(x.lim)){ +tempo <- fun_check(data = x.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & any(x.lim %in% c(Inf, -Inf))){ +tempo.cat <- paste0("ERROR IN ", function.name, ": x.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(x.lab)){ +if(all(class(x.lab) %in% "expression")){ # to deal with math symbols +tempo <- fun_check(data = x.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee) +}else{ +tempo <- fun_check(data = x.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +} +tempo <- fun_check(data = x.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(x.tick.nb)){ +tempo <- fun_check(data = x.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & x.tick.nb < 0){ +tempo.cat <- paste0("ERROR IN ", function.name, ": x.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(x.inter.tick.nb)){ +tempo <- fun_check(data = x.inter.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & x.inter.tick.nb < 0){ +tempo.cat <- paste0("ERROR IN ", function.name, ": x.inter.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo <- fun_check(data = x.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = x.left.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = x.right.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = x.text.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee) +if( ! is.null(y.lim)){ +tempo <- fun_check(data = y.lim, class = "vector", mode = "numeric", length = 2, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & any(y.lim %in% c(Inf, -Inf))){ +tempo.cat <- paste0("ERROR IN ", function.name, ": y.lim ARGUMENT CANNOT CONTAIN -Inf OR Inf VALUES") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(y.lab)){ +if(all(class(y.lab) %in% "expression")){ # to deal with math symbols +tempo <- fun_check(data = y.lab, class = "expression", length = 1, fun.name = function.name) ; eval(ee) +}else{ +tempo <- fun_check(data = y.lab, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +} +tempo <- fun_check(data = y.log, options = c("no", "log2", "log10"), length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(y.tick.nb)){ +tempo <- fun_check(data = y.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & y.tick.nb < 0){ +tempo.cat <- paste0("ERROR IN ", function.name, ": y.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +if( ! is.null(y.inter.tick.nb)){ +tempo <- fun_check(data = y.inter.tick.nb, class = "vector", typeof = "integer", length = 1, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE & y.inter.tick.nb < 0){ +tempo.cat <- paste0("ERROR IN ", function.name, ": y.inter.tick.nb ARGUMENT MUST BE A NON NULL POSITIVE INTEGER") +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +tempo <- fun_check(data = y.include.zero, class = "vector", mode = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y.top.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y.bottom.extra.margin, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = y.text.angle, class = "vector", typeof = "integer", double.as.integer.allowed = TRUE, length = 1, neg.values = TRUE, fun.name = function.name) ; eval(ee) +# inactivated because x.lim and y.lim already log transformed +# if(tempo$problem == FALSE & y.log == TRUE & xy.include.zero == TRUE){ +# warn.count <- warn.count + 1 ; tempo.warn <- paste0("(", warn.count,") BOTH y.log AND xy.include.zero ARGUMENTS SET TO TRUE -> xy.include.zero ARGUMENT RESET TO FALSE") +# warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +# } +tempo <- fun_check(data = text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = title, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = title.text.size, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = legend.show, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(legend.width)){ +tempo <- fun_check(data = legend.width, prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = raster, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = raster.ratio, class = "vector", mode = "numeric", length = 1, neg.values = FALSE, fun.name = function.name) ; eval(ee) +if( ! is.null(raster.threshold)){ +tempo <- fun_check(data = raster.threshold, class = "vector", typeof = "integer", neg.values = FALSE, double.as.integer.allowed = TRUE, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = article, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = grid, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = return, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = plot, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(add)){ +tempo <- fun_check(data = add, class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +tempo <- fun_check(data = warn.print, class = "logical", length = 1, fun.name = function.name) ; eval(ee) +if( ! is.null(lib.path)){ +tempo <- fun_check(data = lib.path, class = "vector", mode = "character", fun.name = function.name) ; eval(ee) +if(tempo$problem == FALSE){ +if( ! all(dir.exists(lib.path))){ # separation to avoid the problem of tempo$problem == FALSE and lib.path == NA +tempo.cat <- paste0("ERROR IN ", function.name, ": DIRECTORY PATH INDICATED IN THE lib.path ARGUMENT DOES NOT EXISTS:\n", paste(lib.path, collapse = "\n")) +text.check <- c(text.check, tempo.cat) +arg.check <- c(arg.check, TRUE) +} +} +} +if(any(arg.check) == TRUE){ +stop(paste0("\n\n================\n\n", paste(text.check[arg.check], collapse = "\n"), "\n\n================\n\n"), call. = FALSE) # +} +# source("C:/Users/Gael/Documents/Git_versions_to_use/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_check_dev)) # activate this line and use the function (with no arguments left as NULL) to check arguments status and if they have been checked using fun_check() +# end primary argument checking + + + + + + + + +# second round of checking and data preparation +# check list lengths (and names of data1 compartments if non name present) +warn <- NULL +warn.count <- 0 +if(all(class(data1) == "list")){ +if(length(data1) > 6){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": data1 ARGUMENT MUST BE A LIST OF 6 DATA FRAMES MAXIMUM (6 OVERLAYS MAX)\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +if(is.null(names(data1))){ +names(data1) <- paste0("L", 1:length(data1)) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL NAME COMPARTMENT OF data1 LIST -> NAMES RESPECTIVELY ATTRIBUTED TO EACH COMPARTMENT:\n", paste(names(data1), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +if( ! is.null(x)){ +if( ! (all(class(x) == "list") & length(data1) == length(x))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": x ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +}else{ +x <- vector("list", length(data1)) +} +if( ! is.null(y)){ +if( ! (all(class(y) == "list") & length(data1) == length(y))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": y ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +}else{ +y <- vector("list", length(data1)) +} +if( ! is.null(categ)){ +if( ! (all(class(categ) == "list") & length(data1) == length(categ))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": categ ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +if( ! is.null(legend.name)){ +if( ! (all(class(legend.name) == "list") & length(data1) == length(legend.name))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": legend.name ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +if( ! is.null(color)){ +if( ! (all(class(color) == "list") & length(data1) == length(color))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": color ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +if( ! (all(class(geom) == "list") & length(data1) == length(geom))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": geom ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +if( ! (all(class(alpha) == "list") & length(data1) == length(alpha))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": alpha ARGUMENT MUST BE A LIST OF SAME LENGTH AS data1 IF data1 IS A LIST\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +# end check list lengths (and names of data1 compartments if non name present) +# conversion into lists +if(all(is.data.frame(data1))){ +data1 <- list(L1 = data1) +if(all(class(x) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": x ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +x <- list(L1 = x) +} +if(all(class(y) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": y ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +y <- list(L1 = y) +} +if( ! is.null(categ)){ +if(all(class(categ) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": categ ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +categ <- list(L1 = categ) +} +} +if( ! is.null(legend.name)){ +if(all(class(legend.name) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": legend.name ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +legend.name <- list(L1 = legend.name) +} +} +if( ! is.null(color)){ +if(all(class(color) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": color ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +color <- list(L1 = color) +} +} +if(all(class(geom) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": geom ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +geom <- list(L1 = geom) +} +if(all(class(alpha) == "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": alpha ARGUMENT CANNOT BE A LIST IF data1 IS A DATA FRAME\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +alpha <- list(L1 = alpha) +} +}else if( ! all(sapply(data1, FUN = "class") == "data.frame")){ # if not a data frame, data1 can only be a list, as tested above +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": data1 ARGUMENT MUST BE A DATA FRAME OR A LIST OF DATA FRAMES\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +# data, x, y, geom, alpha are list now +# if non NULL, categ, legend.name, color are list now +# end conversion into lists +# legend name filling +if(is.null(legend.name) & ! is.null(categ)){ +legend.name <- categ +}else if(is.null(legend.name) & is.null(categ)){ +legend.name <- vector("list", length(data1)) # null list +} +# legend.name not NULL anymore (list) +# end legend name filling +# ini categ for legend display +fin.lg.disp <- vector("list", 6) # will be used at the end to display or not legends +fin.lg.disp[] <- FALSE +legend.disp <- vector("list", length(data1)) +if(is.null(categ) | legend.show == FALSE){ +legend.disp[] <- FALSE +}else{ +for(i2 in 1:length(data1)){ +if(is.null(categ[[i2]])){ +legend.disp[[i2]] <- FALSE +}else{ +legend.disp[[i2]] <- TRUE +} +} +} +# end ini categ for legend display +# integer colors into gg_palette +tempo.check.color <- NULL +for(i1 in 1:length(data1)){ +if(any(is.na(color[[i1]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": color ARGUMENT CANNOT CONTAIN NA\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +tempo.check.color <- c(tempo.check.color, fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), class = "integer", double.as.integer.allowed = TRUE, na.contain = TRUE, fun.name = function.name, print = FALSE)$problem) +} +tempo.check.color <- ! tempo.check.color # invert TRUE and FALSE because if integer, then problem = FALSE +if(any(tempo.check.color == TRUE)){ # convert integers into colors +tempo.integer <- unlist(color[tempo.check.color]) +tempo.color <- fun_gg_palette(max(tempo.integer, na.rm = TRUE)) +for(i1 in 1:length(data1)){ +if(tempo.check.color[i1] == TRUE){ +color[[i1]] <-tempo.color[color[[i1]]] +} +} +} +# end integer colors into gg_palette + + +# second round of argument checking +compart.null.color <- 0 # will be used to attribute a color when color is non NULL but a compartment of color is NULL +data1.ini <- data1 # to report NA removal +removed.row.nb <- vector("list", length = length(data1)) # to report NA removal +removed.rows <- vector("list", length = length(data1)) # to report NA removal +for(i1 in 1:length(data1)){ +tempo <- fun_check(data = data1[[i1]], data.name = ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "data.frame", na.contain = TRUE, fun.name = function.name) ; eval(ee) +# reserved word checking +if(any(names(data1[[i1]]) %in% reserved.words)){ # I do not use fun_name_change() because cannot control y before creating "fake_y". But ok because reserved are not that common +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": COLUMN NAMES OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " ARGUMENT CANNOT BE ONE OF THESE WORDS\n", paste(reserved.words, collapse = " "), "\nTHESE ARE RESERVED FOR THE ", function.name, " FUNCTION\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +# end reserved word checking +# check of geom now because required for y argument +tempo <- fun_check(data = geom[[i1]], data.name = ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), options = c("geom_point", "geom_line", "geom_path", "geom_hline", "geom_vline"), length = 1, fun.name = function.name) ; eval(ee) +# end check of geom now because required for y argument +if(is.null(x[[i1]])){ +if(all(geom[[i1]] != "geom_hline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": x ARGUMENT CANNOT BE NULL EXCEPT IF ", ifelse(length(geom) == 1, "x", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_hline\"\nHERE geom ARGUMENT IS: ", paste(geom[[i1]], collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +x[[i1]] <- "fake_x" +data1[[i1]] <- cbind(data1[[i1]], fake_x = NA) +data1[[i1]][, "fake_x"] <- as.numeric(data1[[i1]][, "fake_x"]) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT ASSOCIATED TO ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT ", geom[[i1]], " -> FAKE COLUMN ADDED TO DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", NAMED \"fake_x\" FOR FINAL DRAWING") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +}else{ +if(all(geom[[i1]] == "geom_hline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": x ARGUMENT MUST BE NULL IF ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_hline\"\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +tempo <- fun_check(data = x[[i1]], data.name = ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT")), class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +if(is.null(y[[i1]])){ +if(all(geom[[i1]] != "geom_vline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": y ARGUMENT CANNOT BE NULL EXCEPT IF ", ifelse(length(geom) == 1, "y", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_vline\"\nHERE geom ARGUMENT IS: ", paste(geom[[i1]], collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +y[[i1]] <- "fake_y" +data1[[i1]] <- cbind(data1[[i1]], fake_y = NA) +data1[[i1]][, "fake_y"] <- as.numeric(data1[[i1]][, "fake_y"]) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT ASSOCIATED TO ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT ", geom[[i1]], " -> FAKE COLUMN ADDED TO DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", NAMED \"fake_y\" FOR FINAL DRAWING") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +}else{ +if(all(geom[[i1]] == "geom_vline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ": y ARGUMENT MUST BE NULL IF ", ifelse(length(geom) == 1, "geom", paste0("geom NUMBER ", i1)), " ARGUMENT IS \"geom_vline\"\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +tempo <- fun_check(data = y[[i1]], data.name = ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT")), class = "vector", mode = "character", length = 1, fun.name = function.name) ; eval(ee) +} +if( ! (x[[i1]] %in% names(data1[[i1]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +if( ! (y[[i1]] %in% names(data1[[i1]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +# na detection and removal (done now to be sure of the correct length of categ) +if(x[[i1]] == "fake_x" & y[[i1]] == "fake_y"){ # because the code cannot accept to be both "fake_x" and "fake_y" at the same time +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 2\nTHE CODE CANNOT ACCEPT x AND y TO BE \"fake_x\" AND \"fake_y\" IN THE SAME DATA FRAME ", i1, " \n\n============\n\n") +stop(tempo.cat, call. = FALSE) +} +if(any(is.na(data1[[i1]][, c(if(x[[i1]] == "fake_x"){NULL}else{x[[i1]]}, if(y[[i1]] == "fake_y"){NULL}else{y[[i1]]})]))){ +tempo.removed.row.nb <- unlist(lapply(lapply(c(data1[[i1]][c(if(x[[i1]] == "fake_x"){NULL}else{x[[i1]]}, if(y[[i1]] == "fake_y"){NULL}else{y[[i1]]})]), FUN = is.na), FUN = which)) +removed.row.nb[[i1]] <- c(removed.row.nb[[i1]], tempo.removed.row.nb) +# report of removed rows will be performed at the very end +data1[[i1]] <- data1[[i1]][-tempo.removed.row.nb, ] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NA DETECTED IN COLUMN ", if(x[[i1]] == "fake_x"){""}else{ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x ARGUMENT"))}, if(x[[i1]] != "fake_x" & y[[i1]] != "fake_y"){" AND "}, if(y[[i1]] == "fake_y"){""}else{ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y ARGUMENT"))}, " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ". CORRESPONDING ROWS HAVE BEEN REMOVED (SEE $removed.row.nb AND $removed.rows)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end na detection and removal (done now to be sure of the correct length of categ) +tempo <- fun_check(data = data1[[i1]][, x[[i1]]], data.name = ifelse(length(x) == 1, "x OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF x ARGUMENT", " IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "vector", mode = "numeric", na.contain = ifelse(x[[i1]] == "fake_x", TRUE, FALSE), fun.name = function.name) ; eval(ee) +tempo <- fun_check(data = data1[[i1]][, y[[i1]]], data.name = ifelse(length(y) == 1, "y OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF y ARGUMENT", " IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "vector", mode = "numeric", na.contain = ifelse(y[[i1]] == "fake_y", TRUE, FALSE), fun.name = function.name) ; eval(ee) +if(( ! is.null(categ)) & ( ! is.null(categ[[i1]]))){ # if categ[[i1]] = NULL, fake_categ will be created later on +tempo <- fun_check(data = categ[[i1]], data.name = ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")),, class = "vector", mode = "character", length = 1, fun.name = function.name) +if( ! (categ[[i1]] %in% names(data1[[i1]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT MUST BE A COLUMN NAME OF ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +# na detection and removal (done now to be sure of the correct length of categ) +if(any(is.na(data1[[i1]][, categ[[i1]]]))){ +tempo.removed.row.nb <- unlist(lapply(lapply(c(data1[[i1]][categ[[i1]]]), FUN = is.na), FUN = which)) +removed.row.nb[[i1]] <- c(removed.row.nb[[i1]], tempo.removed.row.nb) +# report of removed rows will be performed at the very end +data1[[i1]] <- data1[[i1]][-tempo.removed.row.nb, ] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE CATEGORY COLUMN:\n", paste(categ[[i1]], collapse = " "), "\nCONTAINS NA") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end na detection and removal (done now to be sure of the correct length of categ) +tempo1 <- fun_check(data = data1[[i1]][, categ[[i1]]], data.name = ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "vector", mode = "character", na.contain = FALSE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = data1[[i1]][, categ[[i1]]], data.name = ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), class = "factor", na.contain = FALSE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " MUST BE A FACTOR OR CHARACTER VECTOR\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if(tempo1$problem == FALSE){ +data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE CHARACTER COLUMN HAS BEEN CONVERTED TO FACTOR") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) + +} +# OK: all the non NULL categ columns of data1 are factors from here +if(geom[[i1]] == "geom_vline" | geom[[i1]] == "geom_hline"){ +if(length(unique(data1[[i1]][, categ[[i1]]])) != nrow(data1[[i1]])){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(geom) == 1, "geom OF data1 ARGUMENT", paste0("geom NUMBER ", i1, " OF DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " ARGUMENT IS ", geom[[i1]], ", MEANING THAT ", ifelse(length(categ) == 1, "categ OF data1 ARGUMENT", paste0("ELEMENT ", i1, " OF categ ARGUMENT IN DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " MUST HAVE A DIFFERENT CLASS PER LINE OF data1 (ONE x VALUE PER CLASS)\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +}else if(( ! is.null(categ)) & is.null(categ[[i1]])){ # if categ[[i1]] = NULL, fake_categ will be created. BEWARE: is.null(categ[[i1]]) means no legend display (see above), because categ has not been precised. This also means a single color for data1[[i1]] +if(length(color[[i1]]) > 1){ # 0 means is.null(color[[i1]]) and 1 is ok -> single color for data1[[i1]] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT BUT CORRESPONDING COLORS IN ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " HAS LENGTH OVER 1\n", paste(color[[i1]], collapse = " "), "\nWHICH IS NOT COMPATIBLE WITH NULL CATEG -> COLOR RESET TO A SINGLE COLOR") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +color[[i1]] <- NULL # will provide a single color below +} +categ[[i1]] <- "fake_categ" +data1[[i1]] <- cbind(data1[[i1]], fake_categ = "") +# inactivated because give a different color to different "Line_" categ while a single color for all the data1[[i1]] required. Thus, put back after the color management +# if(geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline"){ +# data1[[i1]][, "fake_categ"] <- paste0("Line_", 1:nrow(data1[[i1]])) +# }else{ +data1[[i1]][, "fake_categ"] <- data1[[i1]][, "fake_categ"] # as.numeric("") create a vector of NA but class numeric +# } +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ")), " ARGUMENT -> FOR DATA FRAME ", ifelse(length(data1) == 1, "data1 ARGUMENT:", paste0("NUMBER ", i1, " OF data1 ARGUMENT:")), "\n- FAKE \"fake_categ\" COLUMN ADDED FILLED WITH \"\"(OR WITH \"Line_...\" FOR LINES)\n- SINGLE COLOR USED FOR PLOTTING\n- NO LEGEND DISPLAYED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +if( ! is.null(legend.name[[i1]])){ +tempo <- fun_check(data = legend.name[[i1]], data.name = ifelse(length(legend.name) == 1, "legend.name", paste0("legend.name NUMBER ", i1)),, class = "vector", mode = "character", length = 1, fun.name = function.name) +} +if( ! is.null(color)){ # if color is NULL, will be filled later on +# check the nature of color +if(is.null(color[[i1]])){ +compart.null.color <- compart.null.color + 1 +color[[i1]] <- grey(compart.null.color / 8) # cannot be more than 7 overlays. Thus 7 different greys. 8/8 is excluded because white dots +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL COLOR IN ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", SINGLE COLOR ", paste(color[[i1]], collapse = " "), " HAS BEEN ATTRIBUTED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +tempo1 <- fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), class = "vector", mode = "character", na.contain = TRUE, fun.name = function.name, print = FALSE) +tempo2 <- fun_check(data = color[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), class = "factor", na.contain = TRUE, fun.name = function.name, print = FALSE) +if(tempo1$problem == TRUE & tempo2$problem == TRUE){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " MUST BE A FACTOR OR CHARACTER VECTOR OR INTEGER VECTOR\n\n================\n\n") # integer possible because dealt above +stop(tempo.cat, call. = FALSE) +}else if( ! (all(color[[i1]] %in% colors() | grepl(pattern = "^#", color[[i1]])))){ # check that all strings of low.color start by # +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors(): ", paste(unique(color[[i1]]), collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +if(any(is.na(color[[i1]]))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE COLORS:\n", paste(unique(color[[i1]]), collapse = " "), "\nCONTAINS NA") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end check the nature of color +# check the length of color +if(is.null(categ) & length(color[[i1]]) != 1){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST BE A SINGLE COLOR IF categ IS NULL\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if( ! is.null(categ)){ +# No problem of NA management by ggplot2 because already removed +if(categ[[i1]] == "fake_categ" & length(color[[i1]]) != 1){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST BE A SINGLE COLOR IF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IS NULL\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if(length(color[[i1]]) == length(unique(data1[[i1]][, categ[[i1]]]))){ # here length(color) is equal to the different number of categ +data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", THE FOLLOWING COLORS:\n", paste(color[[i1]], collapse = " "), "\nHAVE BEEN ATTRIBUTED TO THESE CLASSES:\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(length(color[[i1]]) == length(data1[[i1]][, categ[[i1]]])){# here length(color) is equal to nrow(data1[[i1]]) -> Modif to have length(color) equal to the different number of categ (length(color) == length(levels(data1[[i1]][, categ[[i1]]]))) +data1[[i1]] <- cbind(data1[[i1]], color = color[[i1]]) +tempo.check <- unique(data1[[i1]][ , c(categ[[i1]], "color")]) +if( ! (nrow(data1[[i1]]) == length(color[[i1]]) & nrow(tempo.check) == length(unique(data1[[i1]][ , categ[[i1]]])))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT HAS THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " COLUMN VALUES\nBUT IS INCORRECTLY ASSOCIATED TO EACH CLASS OF THIS categ:\n", paste(unique(mapply(FUN = "paste", data1[[i1]][ ,categ[[i1]]], data1[[i1]][ ,"color"])), collapse = "\n"), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order +color[[i1]] <- unique(color[[i1]][order(data1[[i1]][, categ[[i1]]])]) # Modif to have length(color) equal to the different number of categ (length(color) == length(levels(data1[[i1]][, categ[[i1]]]))) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count, ") FROM FUNCTION ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT HAS THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " COLUMN VALUES\nCOLORS HAVE BEEN RESPECTIVELY ASSOCIATED TO EACH CLASS OF categ AS:\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " "), "\n", paste(color[[i1]], collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +}else if(length(color[[i1]]) == 1){ +data1[[i1]][, categ[[i1]]] <- factor(data1[[i1]][, categ[[i1]]]) # if already a factor, change nothing, if characters, levels according to alphabetical order +color[[i1]] <- rep(color[[i1]], length(levels(data1[[i1]][, categ[[i1]]]))) +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") IN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), ", COLOR HAS LENGTH 1 MEANING THAT ALL THE DIFFERENT CLASSES OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), "\n", paste(levels(factor(data1[[i1]][, categ[[i1]]])), collapse = " "), "\nWILL HAVE THE SAME COLOR\n", paste(color[[i1]], collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else{ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST BE (1) LENGTH 1, OR (2) THE LENGTH OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), " COLUMN VALUES, OR (3) THE LENGTH OF THE CLASSES IN THIS COLUMN. HERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LENGTH ", length(data1[[i1]][, categ[[i1]]]), " AND CATEG CLASS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +if((geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline") & ! is.null(categ[[i1]])){ # add here after the color management, to deal with the different lines to plot inside any data[[i1]] +if(categ[[i1]] == "fake_categ"){ +data1[[i1]][, "fake_categ"] <- factor(paste0("Line_", formatC(1:nrow(data1[[i2]]), width = nchar(nrow(data1[[i2]])), flag = "0"))) +} +} +tempo <- fun_check(data = alpha[[i1]], data.name = ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), prop = TRUE, length = 1, fun.name = function.name) ; eval(ee) +} +if(length(data1) > 1){ +if(length(unique(unlist(x))) > 1){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE x ARGUMENT DOES NOT CONTAIN IDENTICAL COLUMN NAMES:\n", paste(unlist(x), collapse = " "), "\nX-AXIS OVERLAYING DIFFERENT VARIABLES?") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +if(length(data1) > 1){ +if(length(unique(unlist(y))) > 1){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE y ARGUMENT DOES NOT CONTAIN IDENTICAL COLUMN NAMES:\n", paste(unlist(y), collapse = " "), "\nY-AXIS OVERLAYING DIFFERENT VARIABLES?") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +if(sum(geom %in% "geom_point") > 3){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": geom ARGUMENT CANNOT HAVE MORE THAN THREE \"geom_point\" ELEMENTS\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if(length(geom) - sum(geom %in% "geom_point") > 3){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": geom ARGUMENT CANNOT HAVE MORE THAN THREE LINE ELEMENTS\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +if(x.log != "no"){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") x.log ARGUMENT SET TO ", x.log, ".\nVALUES FROM THE x ARGUMENT COLUMN OF THE data1 DATA FRAME MUST BE ALREADY ", toupper(x.log), " TRANSFORMED, AS THE x.log ARGUMENT JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +if( ! is.null(x.lim)){ +if(any(x.lim <= 0)){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") x.lim ARGUMENT CAN SPAN ZERO OR NEGATIVE VALUES IF x.log ARGUMENT IS SET TO ", x.log, " BECAUSE THIS LATTER ARGUMENT DOES NOT TRANSFORM DATA, JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(any( ! is.finite(if(x.log == "log10"){10^x.lim}else{2^x.lim}))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": x.lim ARGUMENT RETURNS INF WITH THE x.log ARGUMENT SET TO ", x.log, "\nAS SCALE COMPUTATION IS ", ifelse(x.log == "log10", 10, 2), "^x.lim:\n", paste(ifelse(x.log == "log10", 10, 2)^x.lim, collapse = " "), "\nARE YOU SURE THAT x.lim ARGUMENT HAS BEEN SPECIFIED WITH VALUES ALREADY IN LOG SCALE?\n", paste(x.lim, collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +if(y.log != "no"){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") y.log ARGUMENT SET TO ", y.log, ".\nVALUES FROM THE y ARGUMENT COLUMN OF THE data1 DATA FRAME MUST BE ALREADY ", toupper(y.log), " TRANSFORMED, AS THE y.log ARGUMENT JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +if( ! is.null(y.lim)){ +if(any(y.lim <= 0)){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") y.lim ARGUMENT CAN SPAN ZERO OR NEGATIVE VALUES IF y.log ARGUMENT IS SET TO ", y.log, " BECAUSE THIS LATTER ARGUMENT DOES NOT TRANSFORM DATA, JUST MODIFIES THE AXIS SCALE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else if(any( ! is.finite(if(y.log == "log10"){10^y.lim}else{2^y.lim}))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": y.lim ARGUMENT RETURNS INF WITH THE y.log ARGUMENT SET TO ", y.log, "\nAS SCALE COMPUTATION IS ", ifelse(y.log == "log10", 10, 2), "^y.lim:\n", paste(ifelse(y.log == "log10", 10, 2)^y.lim, collapse = " "), "\nARE YOU SURE THAT y.lim ARGUMENT HAS BEEN SPECIFIED WITH VALUES ALREADY IN LOG SCALE?\n", paste(y.lim, collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +if( ! is.null(add)){ +if( ! grepl(pattern = "^\\+", add)){ # check that the add string start by + +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": add ARGUMENT MUST START WITH \"+\": ", paste(unique(add), collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if( ! grepl(pattern = "ggplot2::", add)){ # +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": add ARGUMENT MUST CONTAIN \"ggplot2::\" IN FRONT OF EACH GGPLOT2 FUNCTION: ", paste(unique(add), collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if( ! grepl(pattern = ")$", add)){ # check that the add string finished by ) +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, ": add ARGUMENT MUST FINISH BY \")\": ", paste(unique(add), collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +# end second round of argument checking +# end second round of checking and data preparation + + + + + +# package checking +fun_pack(req.package = c("ggplot2", "gridExtra"), lib.path = lib.path) +# packages Cairo and grid tested by fun_gg_point_rast() +# end package checking + + + + +# main code +# axes management +if(is.null(x.lim)){ +if(any(unlist(mapply(FUN = "[[", data1, x, SIMPLIFY = FALSE)) %in% c(Inf, -Inf))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE x COLUMN IN data1 CONTAINS -Inf OR Inf VALUES THAT WILL NOT BE CONSIDERED IN THE PLOT RANGE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +x.lim <- suppressWarnings(range(unlist(mapply(FUN = "[[", data1, x, SIMPLIFY = FALSE)), na.rm = TRUE, finite = TRUE)) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only. x.lim added here. If NULL, ok if x argument has values +if(suppressWarnings(all(x.lim %in% c(Inf, -Inf)))){ +if(all(unlist(geom) == "geom_hline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " NOT POSSIBLE TO ONLY DRAW geom_hline KIND OF LINES IF x.lim ARGUMENT IS SET TO NULL, SINCE NO X-AXIS DEFINED (", ifelse(length(x) == 1, "x", paste0("ELEMENT ", i1, " OF x")), " ARGUMENT MUST BE NULL FOR THESE KIND OF LINES)\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " x.lim ARGUMENT MADE OF NA, -Inf OR Inf ONLY: ", paste(x.lim, collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +x.lim.order <- order(x.lim) # to deal with inverse axis +# print(x.lim.order) +x.lim <- sort(x.lim) +x.lim[1] <- x.lim[1] - abs(x.lim[2] - x.lim[1]) * ifelse(diff(x.lim.order) > 0, x.right.extra.margin, x.left.extra.margin) # diff(x.lim.order) > 0 means not inversed axis +x.lim[2] <- x.lim[2] + abs(x.lim[2] - x.lim[1]) * ifelse(diff(x.lim.order) > 0, x.left.extra.margin, x.right.extra.margin) # diff(x.lim.order) > 0 means not inversed axis +if(x.include.zero == TRUE){ # no need to check x.log != "no" because done before +x.lim <- range(c(x.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only +} +x.lim <- x.lim[x.lim.order] +if(any(is.na(x.lim))){ +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 3\n\n============\n\n") +stop(tempo.cat, call. = FALSE) +} +if(is.null(y.lim)){ +if(any(unlist(mapply(FUN = "[[", data1, y, SIMPLIFY = FALSE)) %in% c(Inf, -Inf))){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") THE y COLUMN IN data1 CONTAINS -Inf OR Inf VALUES THAT WILL NOT BE CONSIDERED IN THE PLOT RANGE") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +y.lim <- suppressWarnings(range(unlist(mapply(FUN = "[[", data1, y, SIMPLIFY = FALSE)), na.rm = TRUE, finite = TRUE)) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only. y.lim added here. If NULL, ok if y argument has values +if(suppressWarnings(all(y.lim %in% c(Inf, -Inf)))){ # happen when y is only NULL +if(all(unlist(geom) == "geom_vline")){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " NOT POSSIBLE TO ONLY DRAW geom_vline KIND OF LINES IF y.lim ARGUMENT IS SET TO NULL, SINCE NO Y-AXIS DEFINED (", ifelse(length(y) == 1, "y", paste0("ELEMENT ", i1, " OF y")), " ARGUMENT MUST BE NULL FOR THESE KIND OF LINES)\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else{ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " y.lim ARGUMENT MADE OF NA, -Inf OR Inf ONLY: ", paste(y.lim, collapse = " "), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +y.lim.order <- order(y.lim) # to deal with inverse axis +y.lim <- sort(y.lim) +y.lim[1] <- y.lim[1] - abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.bottom.extra.margin, y.top.extra.margin) # diff(y.lim.order) > 0 means not inversed axis +y.lim[2] <- y.lim[2] + abs(y.lim[2] - y.lim[1]) * ifelse(diff(y.lim.order) > 0, y.top.extra.margin, y.bottom.extra.margin) # diff(y.lim.order) > 0 means not inversed axis +if(y.include.zero == TRUE){ # no need to check y.log != "no" because done before +y.lim <- range(c(y.lim, 0), na.rm = TRUE, finite = TRUE) # finite = TRUE removes all the -Inf and Inf except if only this. In that case, whatever the -Inf and/or Inf present, output -Inf;Inf range. Idem with NA only +} +y.lim <- y.lim[y.lim.order] +if(any(is.na(y.lim))){ +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 4\n\n============\n\n") +stop(tempo.cat, call. = FALSE) +} +# end axes management + + + + +# create a fake categ if NULL to deal with legend display +if(is.null(categ)){ +categ <- vector("list", length(data1)) +categ[] <- "fake_categ" +for(i2 in 1:length(data1)){ +data1[[i2]] <- cbind(data1[[i2]], fake_categ = "") +if(geom[[i2]] == "geom_hline" | geom[[i2]] == "geom_vline"){ +data1[[i2]][, "fake_categ"] <- factor(paste0("Line_", 1:nrow(data1[[i2]]))) +} +} +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL categ ARGUMENT -> FAKE \"fake_categ\" COLUMN ADDED TO EACH DATA FRAME OF data1, AND FILLED WITH \"\"") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end create a fake categ if NULL to deal with legend display + + + + +# vector of color with length as in data1 +if(is.null(color)){ +color <- vector("list", length(data1)) +length.categ.list <- lapply(lapply(mapply(FUN = "[[", data1, categ, SIMPLIFY = FALSE), FUN = unique), FUN = function(x){length(x[ ! is.na(x)])}) +length.categ.list[sapply(categ, FUN = "==", "fake_categ")] <- 1 # when is.null(color), a single color for all the dots or lines of data[[i1]] that contain "fake_categ" category +total.categ.length <- sum(unlist(length.categ.list), na.rm = TRUE) +tempo.color <- fun_gg_palette(total.categ.length) +tempo.count <- 0 +for(i3 in 1:length(data1)){ +color[[i3]] <- tempo.color[(1:length.categ.list[[i3]]) + tempo.count] +tempo.count <- tempo.count + length.categ.list[[i3]] +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") NULL color ARGUMENT -> COLORS RESPECTIVELY ATTRIBUTED TO EACH CLASS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i3, " OF categ ARGUMENT")), " (", categ[[i3]], ") IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i3, " OF data1 ARGUMENT")), ":\n", paste(color[[i3]], collapse = " "), "\n", paste(if(all(levels(data1[[i3]][, categ[[i3]]]) == "")){'\"\"'}else{levels(data1[[i3]][, categ[[i3]]])}, collapse = " ")) +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +# end vector of color with length as in data1 + + + + +# last check +for(i1 in 1:length(data1)){ +if(categ[[i1]] != "fake_categ" & length(color[[i1]]) != length(unique(data1[[i1]][, categ[[i1]]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " LAST CHECK: ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST HAVE THE LENGTH OF LEVELS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LEVELS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +}else if(categ[[i1]] == "fake_categ" & length(color[[i1]]) != 1){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " LAST CHECK: ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST HAVE LENGTH 1 WHEN ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IS NULL\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +# end last check + + + + + +# conversion of geom_hline and geom_vline +for(i1 in 1:length(data1)){ +if(geom[[i1]] == "geom_hline" | geom[[i1]] == "geom_vline"){ +final.data.frame <- data.frame() +for(i3 in 1:nrow(data1[[i1]])){ +tempo.data.frame <- rbind(data1[[i1]][i3, ], data1[[i1]][i3, ]) +if(geom[[i1]] == "geom_hline"){ +tempo.data.frame[, x[[i1]]] <- x.lim +}else if(geom[[i1]] == "geom_vline"){ +tempo.data.frame[, y[[i1]]] <- y.lim +}else{ +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 5\n\n============\n\n") +stop(tempo.cat, call. = FALSE) +} +# 3 lines below inactivated because I put that above +# if(is.null(categ[[i1]])){ +# data1[, "fake_categ"] <- paste0("Line_", i3) +# } +final.data.frame <- rbind(final.data.frame, tempo.data.frame) +} +data1[[i1]] <- final.data.frame +geom[[i1]] <- "geom_line" +if(length(color[[i1]]) == 1){ +color[[i1]] <- rep(color[[i1]], length(unique(data1[[i1]][ , categ[[i1]]]))) +}else if(length(color[[i1]]) != length(unique(data1[[i1]][ , categ[[i1]]]))){ +tempo.cat <- paste0("\n\n================\n\nERROR IN ", function.name, " geom_hline AND geom_vline CONVERSION TO FIT THE XLIM AND YLIM LIMITS OF THE DATA: ", ifelse(length(color) == 1, "color", paste0("color NUMBER ", i1)), " ARGUMENT MUST HAVE THE LENGTH OF LEVELS OF ", ifelse(length(categ) == 1, "categ", paste0("ELEMENT ", i1, " OF categ ARGUMENT")), " IN ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i1, " OF data1 ARGUMENT")), "\nHERE IT IS COLOR LENGTH ", length(color[[i1]]), " VERSUS CATEG LEVELS LENGTH ", length(unique(data1[[i1]][, categ[[i1]]])), "\n\n================\n\n") +stop(tempo.cat, call. = FALSE) +} +} +} +# end conversion of geom_hline and geom_vline + + + + +# kind of geom_point (vectorial or raster) +scatter.kind <- vector("list", length = length(data1)) # list of same length as data1, that will be used to use either ggplot2::geom_point() (vectorial dot layer) or fun_gg_point_rast() (raster dot layer) +fix.ratio <- FALSE +if(is.null(raster.threshold)){ +if(raster == TRUE){ +scatter.kind[] <- "fun_gg_point_rast" # not important to fill everything: will be only used when geom == "geom_point" +fix.ratio <- TRUE +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") RASTER PLOT GENERATED -> ASPECT RATIO OF THE PLOT REGION SET BY THE raster.ratio ARGUMENT (", fun_round(raster.ratio, 2), ") TO AVOID A BUG OF ELLIPSOID DOT DRAWING") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +}else{ +scatter.kind[] <- "ggplot2::geom_point" +} +}else{ +for(i2 in 1:length(data1)){ +if(geom[[i2]] == "geom_point"){ +if(nrow(data1[[i2]]) <= raster.threshold){ +scatter.kind[[i2]] <- "ggplot2::geom_point" +}else{ +scatter.kind[[i2]] <- "fun_gg_point_rast" +fix.ratio <- TRUE +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") ", ifelse(length(data1) == 1, "data1 ARGUMENT", paste0("DATA FRAME NUMBER ", i2, " OF data1 ARGUMENT")), " LAYER AS RASTER (NOT VECTORIAL)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +} +if(any(unlist(scatter.kind) == "fun_gg_point_rast")){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") RASTER PLOT GENERATED -> ASPECT RATIO OF THE PLOT REGION SET BY THE raster.ratio ARGUMENT (", fun_round(raster.ratio, 2), ") TO AVOID A BUG OF ELLIPSOID DOT DRAWING") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +# end kind of geom_point (vectorial or raster) + + + + +# no need loop part +coord.names <- NULL +tempo.gg.name <- "gg.indiv.plot." +tempo.gg.count <- 0 +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ggplot()) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::xlab(if(is.null(x.lab)){x[[1]]}else{x.lab})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ylab(if(is.null(y.lab)){y[[1]]}else{y.lab})) +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::ggtitle(title)) +# text angle management +x.tempo.just <- fun_gg_just(angle = x.text.angle, axis = "x") +y.tempo.just <- fun_gg_just(angle = y.text.angle, axis = "y") +# end text angle management +add.check <- TRUE +if( ! is.null(add)){ # if add is NULL, then = 0 +if(grepl(pattern = "ggplot2::theme", add) == TRUE){ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") \"ggplot2::theme\" STRING DETECTED IN THE add ARGUMENT -> INTERNAL GGPLOT2 THEME FUNCTIONS theme() AND theme_classic() HAVE BEEN INACTIVATED, TO BE USED BY THE USER. +\nIT IS RECOMMENDED TO USE \"+ theme(aspect.ratio = raster.ratio)\" IF RASTER MODE IS ACTIVATED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +add.check <- FALSE +} +} +if(add.check == TRUE & article == TRUE){ +# BEWARE: not possible to add several times theme(). NO message but the last one overwrites the others +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::theme_classic(base_size = text.size)) +if(grid == TRUE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +line = ggplot2::element_line(size = 0.5), +axis.line.y.left = ggplot2::element_line(colour = "black"), # draw lines for the y axis +axis.line.x.bottom = ggplot2::element_line(colour = "black"), # draw lines for the x axis +panel.grid.major.x = ggplot2::element_line(colour = "grey75"), +panel.grid.major.y = ggplot2::element_line(colour = "grey75"), +axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust), +axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), +aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster +)) +}else{ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +line = ggplot2::element_line(size = 0.5), +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +axis.line.y.left = ggplot2::element_line(colour = "black"), +axis.line.x.bottom = ggplot2::element_line(colour = "black"), +axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust), +axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), +aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster +)) +} +}else if(add.check == TRUE & article == FALSE){ +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), m.gg <- ggplot2::theme( +text = ggplot2::element_text(size = text.size), +plot.title = ggplot2::element_text(size = title.text.size), # stronger than text +line = ggplot2::element_line(size = 0.5), +legend.key = ggplot2::element_rect(color = "white", size = 1.5), # size of the frame of the legend +panel.background = ggplot2::element_rect(fill = "grey95"), +axis.line.y.left = ggplot2::element_line(colour = "black"), +axis.line.x.bottom = ggplot2::element_line(colour = "black"), +panel.grid.major.x = ggplot2::element_line(colour = "grey75"), +panel.grid.major.y = ggplot2::element_line(colour = "grey75"), +panel.grid.minor.x = ggplot2::element_blank(), +panel.grid.minor.y = ggplot2::element_blank(), +strip.background = ggplot2::element_rect(fill = "white", colour = "black"), +axis.text.x = ggplot2::element_text(angle = x.tempo.just$angle, hjust = x.tempo.just$hjust, vjust = x.tempo.just$vjust), +axis.text.y = ggplot2::element_text(angle = y.tempo.just$angle, hjust = y.tempo.just$hjust, vjust = y.tempo.just$vjust), +aspect.ratio = if(fix.ratio == TRUE){raster.ratio}else{NULL} # for raster +# do not work -> legend.position = "none" # to remove the legend completely: https://www.datanovia.com/en/blog/how-to-remove-legend-from-a-ggplot/ +)) +} +# end no need loop part + + + +# loop part +point.count <- 0 +line.count <- 0 +lg.order <- vector(mode = "list", length = 6) # order of the legend +lg.order <- lapply(lg.order, as.numeric) # order of the legend +lg.color <- vector(mode = "list", length = 6) # color of the legend +lg.alpha <- vector(mode = "list", length = 6) # order of the legend +lg.alpha <- lapply(lg.alpha, as.numeric) # alpha of the legend +for(i1 in 1:length(data1)){ +if(geom[[i1]] == "geom_point"){ +point.count <- point.count + 1 +if(point.count == 1){ +fin.lg.disp[[1]] <- legend.disp[[point.count + line.count]] +lg.order[[1]] <- point.count + line.count +lg.color[[1]] <- color[[i1]] +lg.alpha[[1]] <- alpha[[i1]] +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], fill = categ[[i1]]), size = dot.size, color = color[[i1]][i5], alpha = alpha[[i1]])) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_fill_manual(name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = as.character(color[[i1]]), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], linetype = 0)))) # values are the values of fill. order determines the order in the legend +} +if(point.count == 2){ +fin.lg.disp[[2]] <- legend.disp[[point.count + line.count]] +lg.order[[2]] <- point.count + line.count +lg.color[[2]] <- color[[i1]] +lg.alpha[[2]] <- alpha[[i1]] +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], shape = categ[[i1]]), size = dot.size, color = color[[i1]][i5], alpha = alpha[[i1]])) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_shape_manual(name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(19, length(color[[i1]])), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], linetype = 0)))) # values are the values of shape +} +if(point.count == 3){ +fin.lg.disp[[3]] <- legend.disp[[point.count + line.count]] +lg.order[[3]] <- point.count + line.count +lg.color[[3]] <- color[[i1]] +lg.alpha[[3]] <- alpha[[i1]] +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = scatter.kind[[i1]]))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], stroke = categ[[i1]]), size = dot.size, color = color[[i1]][i5], alpha = alpha[[i1]])) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "stroke", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(0.5, length(color[[i1]])), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], linetype = 0)))) # values are the values of stroke +} +}else{ +line.count <- line.count + 1 +if(line.count == 1){ +fin.lg.disp[[4]] <- legend.disp[[point.count + line.count]] +lg.order[[4]] <- point.count + line.count +lg.color[[4]] <- color[[i1]] +if(plot == TRUE & fin.lg.disp[[4]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1 +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +lg.alpha[[4]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf +}else{ +lg.alpha[[4]] <- alpha[[i1]] +} +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste("ggplot2::", geom[[i1]], sep ="")))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], linetype = categ[[i1]]), color = color[[i1]][i5], size = line.size, lineend = "round", alpha = alpha[[i1]])) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "linetype", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(1, length(color[[i1]])), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], shape = NA)))) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, with different values +} +if(line.count == 2){ +fin.lg.disp[[5]] <- legend.disp[[point.count + line.count]] +lg.order[[5]] <- point.count + line.count +lg.color[[5]] <- color[[i1]] +if(plot == TRUE & fin.lg.disp[[5]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1 +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +lg.alpha[[5]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf +}else{ +lg.alpha[[5]] <- alpha[[i1]] +} +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste("ggplot2::", geom[[i1]], sep ="")))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], alpha = categ[[i1]]), color = color[[i1]][i5], size = line.size, lineend = "round")) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "alpha", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(alpha[[i1]], length(color[[i1]])), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], shape = NA)))) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, with different values +} +if(line.count == 3){ +fin.lg.disp[[6]] <- legend.disp[[point.count + line.count]] +lg.order[[6]] <- point.count + line.count +lg.color[[6]] <- color[[i1]] +if(plot == TRUE & fin.lg.disp[[6]] == TRUE & ((length(dev.list()) > 0 & names(dev.cur()) == "windows") | (length(dev.list()) == 0 & Sys.info()["sysname"] == "Windows"))){ # if any Graph device already open and this device is "windows", or if no Graph device opened yet and we are on windows system -> prevention of alpha legend bug on windows using value 1 +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") GRAPHIC DEVICE USED ON A WINDOWS SYSTEM ->\nTRANSPARENCY OF THE LINES IS INACTIVATED IN THE LEGEND TO PREVENT A WINDOWS DEPENDENT BUG (SEE https://github.com/tidyverse/ggplot2/issues/2452)\nTO OVERCOME THIS ON WINDOWS, USE ANOTHER DEVICE (pdf() FOR INSTANCE)") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +lg.alpha[[6]] <- 1 # to avoid a bug on windows: if alpha argument is different from 1 for lines (transparency), then lines are not correctly displayed in the legend when using the R GUI (bug https://github.com/tidyverse/ggplot2/issues/2452). No bug when using a pdf +}else{ +lg.alpha[[6]] <- alpha[[i1]] +} +class.categ <- levels(factor(data1[[i1]][, categ[[i1]]])) +for(i5 in 1:length(color[[i1]])){ # or length(class.categ). It is the same because already checked that lengths are the same +tempo.data.frame <- data1[[i1]][data1[[i1]][, categ[[i1]]] == class.categ[i5], ] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = paste("ggplot2::", geom[[i1]], sep ="")))(data = tempo.data.frame, mapping = ggplot2::aes_string(x = x[[i1]], y = y[[i1]], size = categ[[i1]]), color = color[[i1]][i5], alpha = alpha[[i1]], lineend = "round")) # beware: a single color allowed for color argument outside aesthetic, hence the loop # legend.show option do not remove the legend, only the aesthetic of the legend (dot, line, etc.) +coord.names <- c(coord.names, paste0(geom[[i1]], ".", class.categ[i5])) +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_discrete_manual(aesthetics = "size", name = if(is.null(legend.name)){NULL}else{legend.name[[i1]]}, values = rep(line.size, length(color[[i1]])), guide = ggplot2::guide_legend(override.aes = list(colour = color[[i1]], shape = NA)))) # values are the values of linetype. 1 means solid. Regarding the alpha bug, I have tried different things without success: alpha in guide alone, in geom alone, in both, with different values +} +} +} +# end loop part + + + + +# legend display +tempo.legend.final <- 'ggplot2::guides(fill = if(fin.lg.disp[[1]] == TRUE){ggplot2::guide_legend(order = lg.order[[1]], override.aes = list(alpha = lg.alpha[[1]], color = lg.color[[1]]))}else{FALSE}, shape = if(fin.lg.disp[[2]] == TRUE){ggplot2::guide_legend(order = lg.order[[2]], override.aes = list(alpha = lg.alpha[[2]], color = lg.color[[2]]))}else{FALSE}, stroke = if(fin.lg.disp[[3]] == TRUE){ggplot2::guide_legend(order = lg.order[[3]], override.aes = list(alpha = lg.alpha[[2]], color = lg.color[[3]]))}else{FALSE}, linetype = if(fin.lg.disp[[4]] == TRUE){ggplot2::guide_legend(order = lg.order[[4]], override.aes = list(alpha = lg.alpha[[4]], color = lg.color[[4]]))}else{FALSE}, alpha = if(fin.lg.disp[[5]] == TRUE){ggplot2::guide_legend(order = lg.order[[5]], override.aes = list(alpha = lg.alpha[[5]], color = lg.color[[5]]))}else{FALSE}, size = if(fin.lg.disp[[6]] == TRUE){ggplot2::guide_legend(order = lg.order[[6]], override.aes = list(alpha = lg.alpha[[6]], color = lg.color[[6]]))}else{FALSE})' # clip = "off" to have secondary ticks outside plot region does not work +if( ! is.null(legend.width)){ +if(any(unlist(legend.disp))){ # means some TRUE +tempo.graph.info <- ggplot2::ggplot_build(eval(parse(text = paste0(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "), ' + ', tempo.legend.final)))) # will be recovered later again, when ylim will be considered +legend.final <- fun_gg_get_legend(ggplot_built = tempo.graph.info, fun.name = function.name) # get legend +fin.lg.disp[] <- FALSE # remove all the legends because now in legend.final +if(is.null(legend.final)){ # even if any(unlist(legend.disp)) id TRUE +legend.final <- fun_gg_empty_graph() # empty graph instead of legend +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") LEGEND REQUESTED (NON NULL categ ARGUMENT OR legend.show ARGUMENT SET TO TRUE)\nBUT IT SEEMS THAT THE PLOT HAS NO LEGEND -> EMPTY LEGEND SPACE CREATED BECAUSE OF THE NON NULL legend.width ARGUMENT\n") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +}else{ # means all FALSE +legend.final <- fun_gg_empty_graph() # empty graph instead of legend +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") LEGEND REQUESTED (NON NULL categ ARGUMENT OR legend.show ARGUMENT SET TO TRUE)\nBUT IT SEEMS THAT THE PLOT HAS NO LEGEND -> EMPTY LEGEND SPACE CREATED BECAUSE OF THE NON NULL legend.width ARGUMENT\n") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +} +if( ! any(unlist(legend.disp))){ +fin.lg.disp[] <- FALSE # remove all the legends +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), eval(parse(text = tempo.legend.final))) +# end legend display + + + + + +# scale management +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::coord_cartesian(xlim = x.lim, ylim = y.lim)) # clip = "off" to have secondary ticks outside plot region does not work +tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$layout$panel_params[[1]] +# x-axis secondary ticks (after ggplot2::coord_cartesian() or ggplot2::coord_flip()) +# tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$layout$panel_params[[1]] +x.second.tick.values <- NULL +x.tempo.tick.pos <- NULL +if(x.log != "no"){ +tempo <- fun_inter_ticks(lim = x.lim, log = x.log) +x.second.tick.values <- tempo$values +x.tempo.tick.pos <- tempo$coordinates +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", x = x.tempo.tick.pos, xend = x.tempo.tick.pos, y = tempo.coord$y.range[1], yend = tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80)) +coord.names <- c(coord.names, "x.second.tick.positions") +}else if(( ! is.null(x.inter.tick.nb)) & x.log == "no"){ +if(x.inter.tick.nb > 0){ +x.ticks.pos <- if(is.null(attributes(tempo.coord$x$breaks))){tempo.coord$x$breaks}else{unlist(attributes(tempo.coord$x$breaks))} # layout$panel_params[[1]]$x$breaks can be characters (labels of the axis). In that case, it has attributes that corresponds to positions # code before ggplot2 3.3.0: suppressWarnings(as.numeric(tempo.coord$x.labels)) # too difficult to predict the behavior of tempo.coord$x.major_source depending on x.lim neg or not, inv or not +x.ticks.pos <- x.ticks.pos[ ! is.na(x.ticks.pos)] +if(length(x.ticks.pos) == 0){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, ": CODE INCONSISTENCY 12\n\n============\n\n") +stop(tempo.cat) +} +tick.dist <- mean(diff(x.ticks.pos), na.rm = TRUE) +minor.tick.dist <- tick.dist / (x.inter.tick.nb + 1) +x.tempo.tick.pos <- seq(x.ticks.pos[1] - tick.dist, x.ticks.pos[length(x.ticks.pos)] + tick.dist, by = minor.tick.dist) +x.tempo.tick.pos <- x.tempo.tick.pos[x.tempo.tick.pos >= min(x.lim) & x.tempo.tick.pos <= max(x.lim)] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", x = x.tempo.tick.pos, xend = x.tempo.tick.pos, y = tempo.coord$y.range[1], yend = tempo.coord$y.range[1] + diff(tempo.coord$y.range) / 80)) +x.second.tick.values <- x.tempo.tick.pos +coord.names <- c(coord.names, "x.second.tick.positions") +} +} +# end x-axis secondary ticks (after ggplot2::coord_cartesian() or ggplot2::coord_flip()) +# x-axis ticks and inv +if(is.null(x.tick.nb) & x.log != "no"){ # integer main ticks for log2 and log10 +tempo.scale <- (as.integer(min(x.lim, na.rm = TRUE)) - 1):(as.integer(max(x.lim, na.rm = TRUE)) + 1) +}else{ +tempo <- if(is.null(attributes(tempo.coord$x$breaks))){tempo.coord$x$breaks}else{unlist(attributes(tempo.coord$x$breaks))} +tempo.scale <- fun_scale(lim = x.lim, n = ifelse(is.null(x.tick.nb), length(tempo[ ! is.na(tempo)]), x.tick.nb)) # in ggplot 3.3.0, tempo.coord$x.major_source replaced by tempo.coord$x$breaks +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_x_continuous( +breaks = tempo.scale, +minor_breaks = x.tempo.tick.pos, # add the grid of the minor ticks +labels = if(x.log == "log10"){ +scales::trans_format("identity", scales::math_format(10^.x)) +}else if(x.log == "log2"){ +scales::trans_format("identity", scales::math_format(2^.x)) +}else if(x.log == "no"){ +ggplot2::waiver() +}else{ +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 6\n\n============\n\n") ; stop(tempo.cat, call. = FALSE) +}, +expand = c(0, 0), # remove space after after axis limits +limits = NA, # indicate that limits must correspond to data limits +trans = ifelse(diff(x.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_x_reverse() +)) +# end x-axis ticks and inv +# y-axis secondary ticks (after ggplot2::coord_cartesian() or ggplot2::coord_flip()) +# tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$layout$panel_params[[1]] +y.second.tick.values <- NULL +y.tempo.tick.pos <- NULL +if(y.log != "no"){ +tempo <- fun_inter_ticks(lim = y.lim, log = y.log) +y.second.tick.values <- tempo$values +y.tempo.tick.pos <- tempo$coordinates +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", y = y.tempo.tick.pos, yend = y.tempo.tick.pos, x = tempo.coord$x.range[1], xend = tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80)) +coord.names <- c(coord.names, "y.second.tick.positions") +}else if(( ! is.null(y.inter.tick.nb)) & y.log == "no"){ +if(y.inter.tick.nb > 0){ +ticks.pos <- if(is.null(attributes(tempo.coord$y$breaks))){tempo.coord$y$breaks}else{unlist(attributes(tempo.coord$y$breaks))} # layout$panel_params[[1]]$y$breaks can be characters (labels of the axis). In that case, it has attributes that corresponds to positions # code before ggplot2 3.3.0: suppressWarnings(as.numeric(tempo.coord$y.labels)) # too difficult to predict the behavior of tempo.coord$x.major_source depending on y.lim neg or not, inv or not +ticks.pos <- ticks.pos[ ! is.na(ticks.pos)] +if(length(ticks.pos) == 0){ +tempo.cat <- paste0("\n\n============\n\nINTERNAL CODE ERROR IN ", function.name, ": CODE INCONSISTENCY 12\n\n============\n\n") +stop(tempo.cat) +} +tick.dist <- mean(diff(ticks.pos), na.rm = TRUE) +minor.tick.dist <- tick.dist / (y.inter.tick.nb + 1) +y.tempo.tick.pos <- seq(ticks.pos[1] - tick.dist, ticks.pos[length(ticks.pos)] + tick.dist, by = minor.tick.dist) +y.tempo.tick.pos <- y.tempo.tick.pos[y.tempo.tick.pos >= min(y.lim) & y.tempo.tick.pos <= max(y.lim)] +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(geom = "segment", y = y.tempo.tick.pos, yend = y.tempo.tick.pos, x = tempo.coord$x.range[1], xend = tempo.coord$x.range[1] + diff(tempo.coord$x.range) / 80)) +y.second.tick.values <- y.tempo.tick.pos +coord.names <- c(coord.names, "y.second.tick.positions") +} +} +# end y-axis secondary ticks (after ggplot2::coord_cartesian() or ggplot2::coord_flip()) +# y-axis ticks and inv +# tempo.coord <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))$layout$panel_params[[1]] +if(is.null(y.tick.nb) & y.log != "no"){ # integer main ticks for log2 and log10 +tempo.scale <- (as.integer(min(y.lim, na.rm = TRUE)) - 1):(as.integer(max(y.lim, na.rm = TRUE)) + 1) +}else{ +tempo <- if(is.null(attributes(tempo.coord$y$breaks))){tempo.coord$y$breaks}else{unlist(attributes(tempo.coord$y$breaks))} +tempo.scale <- fun_scale(lim = y.lim, n = ifelse(is.null(y.tick.nb), length(tempo[ ! is.na(tempo)]), y.tick.nb)) # in ggplot 3.3.0, tempo.coord$y.major_source replaced by tempo.coord$y$breaks +} +assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::scale_y_continuous( +breaks = tempo.scale, +minor_breaks = y.tempo.tick.pos, # add the grid of the minor ticks +labels = if(y.log == "log10"){ +scales::trans_format("identity", scales::math_format(10^.x)) +}else if(y.log == "log2"){ +scales::trans_format("identity", scales::math_format(2^.x)) +}else if(y.log == "no"){ +ggplot2::waiver() +}else{ +tempo.cat <- paste0("\n\n============\n\nERROR IN ", function.name, ": CODE INCONSISTENCY 7\n\n============\n\n") ; stop(tempo.cat, call. = FALSE) +}, +expand = c(0, 0), # remove space after after axis limits +limits = NA, # indicate that limits must correspond to data limits +trans = ifelse(diff(y.lim) < 0, "reverse", "identity") # equivalent to ggplot2::scale_y_reverse() +)) +# end y-axis ticks and inv +# end scale management + + + + +# drawing +fin.plot <- eval(parse(text = paste(paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "),if(is.null(add)){NULL}else{add}))) +if(plot == TRUE){ +if( ! is.null(legend.width)){ # any(unlist(legend.disp)) == TRUE removed to have empty legend space # not & any(unlist(fin.lg.disp)) == TRUE here because converted to FALSE +suppressMessages(suppressWarnings(gridExtra::grid.arrange(fin.plot, legend.final, ncol=2, widths=c(1, legend.width)))) +}else{ +suppressMessages(suppressWarnings(print(fin.plot))) +} +}else{ +warn.count <- warn.count + 1 +tempo.warn <- paste0("(", warn.count,") PLOT NOT SHOWN AS REQUESTED") +warn <- paste0(ifelse(is.null(warn), tempo.warn, paste0(warn, "\n\n", tempo.warn))) +} +# end drawing + + + +# outputs +if(warn.print == TRUE & ! is.null(warn)){ +warning(paste0("FROM ", function.name, " FUNCTION:\n\n", warn), call. = FALSE) # to recover the warning messages, use return = TRUE +} +if(return == TRUE){ +output <- ggplot2::ggplot_build(fin.plot) +# output$data <- output$data[-1] # yes for boxplot but not for scatter # remove the first data because corresponds to the initial empty boxplot +if(length(output$data) != length(coord.names)){ +tempo.cat <- paste0("\n\n================\n\nINTERNAL CODE ERROR IN ", function.name, ": length(output$data) AND length(coord.names) MUST BE IDENTICAL. CODE HAS TO BE MODIFIED\n\n================\n\n") +stop(tempo.cat) +}else{ +names(output$data) <- coord.names +} +if(is.null(unlist(removed.row.nb))){ +removed.row.nb <- NULL +removed.rows <- NULL +}else{ +for(i3 in 1:length(data1)){ +if( ! is.null(removed.row.nb[[i3]])){ +removed.row.nb[[i3]] <- sort(removed.row.nb[[i3]]) +removed.rows[[i3]] <- data1.ini[[i3]][removed.row.nb[[i3]], ] +} +} +} +tempo <- output$layout$panel_params[[1]] +output <- list( +data = data1, +removed.row.nb = removed.row.nb, +removed.rows = removed.rows, +plot = c(output$data, x.second.tick.values = list(x.second.tick.values), y.second.tick.values = list(y.second.tick.values)), +axes = list( +x.range = tempo$x.range, +x.labels = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{tempo$x$scale$get_labels()}, # is.null(attributes(tempo$x$breaks)) test if it is number (TRUE) or character (FALSE) +x.positions = if(is.null(attributes(tempo$x$breaks))){tempo$x$breaks}else{unlist(attributes(tempo$x$breaks))}, +y.range = tempo$y.range, +y.labels = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{tempo$y$scale$get_labels()}, +y.positions = if(is.null(attributes(tempo$y$breaks))){tempo$y$breaks}else{unlist(attributes(tempo$y$breaks))} +), +warn = paste0("\n", warn, "\n\n") +) +return(output) +} +# end outputs +# end main code +} + + + diff --git a/fun_gg_boxplot.docx b/fun_gg_boxplot.docx index 342eb1bbf7bd5d931b032f5561cee38296a43dd1..4061c5cf999532971439fdfd35cda628505e0c24 100644 GIT binary patch delta 86252 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� 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 T0YCu*m!OXUB?gm=0RR91`b_AV delta 86396 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 H0RR91D4gpR diff --git a/scatter.docx b/scatter.docx index d0ae21220b878040202ef315ebecb6ced1f073b5..440f3cc5e8a775b5caec1ebbb1372ef506d98a88 100644 GIT binary patch delta 85692 zcmV)NK)1h{l?IEF2C!!d3e+VCD6B030L8<TaS0iJZFAbnmhSgkb^k*T*>wufID{8t zJM1yLFvgkGWP4|vWX`SHbH*iu3_2DPM-s7}srm2sS=|z-g@nNYyBqhZI@z|6g}T@K zTF+YjufN@oUH07$LdW+`O0`P0#B8tc4;*iJQu_Aw{Oxgxg^}eAEZ6t!lhT77mVRsh z-~aP}uXnA1-=B_cFJgFv7q;#u{gcutiYBdh@527b9$R5$?DPXa^lzd{-ygs8Z*H8v z{qD{W2Jh<CT9yAa3H-hthWNg&<$brpQvA5_;?w+z?cuv_{9tTFVZ{%I@5WYeJDt46 z(<fHsTsy84J>c2Z!{jmkNog8*t@wrB&R&Rr{-h;dDE?3K7s0|Ra=usm<ypJ~{2Si| zwu^W0y>R4A=F52M)3C%*@=D*AE#mvwP42s!)D9NDZ?@!BXmA!-cOb?5feVkz*^Ghs zqp>UYf#^G@YW9h>>axYe6ro4V-eHwjkiRo|ld<J^v&TGbYtowwiTD}*{t)=n$?SE1 zCeF`2?W1=)dlm`i8gEuT<dT<OTDaB&7DV^U$eP$CHtx4R4n04xu3fy*UG0DoN0!=9 z7T5mZf&M#TcP%KJ!R1M*T5TLOn!VFfa_KWfuUf4iHqH-@W*5)w8*A!Di?@HKOYghQ z=KC)HhRNrEzQFMYc%EzD;7^)|{5d0k%NufiM!&zKoBrO%J>M<&q(nE0Yk~Ot;N173 z5FcA%-vN!f{xopxfL+*k^iHFW7cO4yWB<}O@-Mj-|8_(E-@fnqLGrEV=T-bqd~f(8 zxmr6;u5{@I`1>W-T&y9vW_xcxoYJlDu$T1K_;0*=`Ubwe(q7V%HD2CbD{8-gp+!bw z$$UA<LWv6wJI%xQg3t6`CfUALII;Q=pGjbccJSRUwOMBE*S>#ChVM&c1rhea8DJBL zIX!EPKfL<jpIZG}!Ar@#JuVjFPR@@z%PH1izydph)vpYP6W5Q}2|Mq6`qJBHH-SH9 z*Zw_SmG+bbh`379P6zd7=irQg_H|LBl8Y(rB;Rhd6K(LT(N2uG?gnxjNleC^8#b^a ztHzv=S^USF07A-O3S1|Qn191u+Z#qBR(qTw*EE+$=e6Ub_X+<RhJ0NNX$JwAEb`fn zbKhdMJ!bX$_9SAC7uiF^d&~+M_eu6yeUIHty{oWqxi-6=BA^>h-2uCQ2AkfpyOHfN zXFTzP2tE{xMmGDqe=TwO<D4tA;$=!}%AaV)q#JbIaxGA&*F0`;%g!xOdfN^fjV^** zVVhp>wqgB=DHa}Y^Sp6ze#!%aExUpnAU=7tBzeOj311Z1fh0-`i>p@~$F)O!7FXcT z{>6=ceM>5*PwA4fwC10GmxEYnxI4EP64q*s0}>l0V!{ou5bakSxXOZ{8?Us<Pm)*x z?Eegb>jr2*Vl2CFDaobyG{uryD5ZS4-IwD~BdJeL(&)q1_gRTdl#F3(k&`@Hbi`89 zo|BW@VFRQOTR#}KP6==#)63%v!`86sTPhB0$O%CVVGoh+y!iHi>677b!{MtIjr396 zE^=4iphATX!{^XPNhLK_&PJ1$)+mmiHahP$%BHkM3E8N3!}g-KyL;+=Xrn-T!b<et ztBH?VMalRv#*bN*(G&9*gI{#h@0L3mSz!NarD?d{aQ&)WuaEaW@S{o*XKO06q4R?x zk$TaxQf#aZolN?FA9z&>yt#q=OsY_)4I{K&$FnQM;zjJOr_|;%xUsy2ft4V0agss) zgu_uxx>)&i@qNX0#zm4%hD$DPT}oV_jS?#q_GMY}U0UiB>h{v|lc*|H9y0Pihuvr+ z2yMu_b#3H5uZu)tcx@<}uiA{f8}A*xED_1OKYYFNUh@2Z!tAk;_c<&v$G*#s-|P10 zlkL%yWuOEir+-`Vt`XiY^LSH<D!o^{VWW6_aCm&yNjfd0))fQ&E5M$|d!~&a1tFof zsNiQsMYnZ7T~snsA#`KrVk%ygKjHQywO6kTB`a&!)HZ0`8bI>Xcc%lp^1}{%Sem%u zT5>*DX&88ajFF6EGEY3{%}5lTVD?7EzK;T{f^h~I(ZMtD)m4h$dawQIdRI=o#Ti*y zyBZf|mB}c&>0O9R;0#AbUgl#_R>^anVKz*?JM-R!d1*GA=e1myUcR0CDe)!pW!Lgk z6tLznxcn`&EIr>pf)t5~s7Q>FY&Ftu`N}<lovUDfh7%?%0N}L>>#nKl<=ailhLG`+ zH>n7xU^dyZQC^g{eRxt`RyT{5FDH*=sr001{!)z+*lL|d?+}5Mz!QqKMhR?TbmIol ze}#U5Q36H@@IjvoeQU8N@PrEP&M1M$E4aI{)Ga6hlPI0V>zN5*y0HvAfuF44>bBx% zbC->OknE6<m<sM}VDu{XBvuN!QBrczRB*+>@uf4?cSE~Am<n!dg(?0U2nAEw_(ab1 z%xaNi;!jKgcP+Imr|IJib>?D9?HUiI$U}+uOsA~=wI4<Pcq0O%+v=b0(#s{;SYS*A zm-GD#PNPc|JYfeUoENIjvSE8|rCOuEbKPcteN;6s*1w{*_nH}B!OtTzei#&Yel?;n zYN_isWhrtZ4#FuFHixBJVYJa%Pj|2k)33tx+Au<!^LJ%t!T_i->RlW+S<LC(-og7$ zGl7Y|Zt$EwoE{GY4oCi7Q2>&fVxrBu@>MzH`0M4j-m-<ho}@tUuyJ^Bp2%yu<DuSv zz$tmX<P#&w900z(Nkl(&s%<)l5X<tNGl)jZcs!>3GYIphmR2av81uPGq3)n@(5clD zj!yHs{0Zmv_!4c;THOjSa3Jz#ODWI55F2>mLKt9Rh3G$qj$gTPvU*VK95nLSLjHua zMSRJyg=Xkb!4{Rk!a;fD$Qyk@XSOGQXQGEco_<dHPUwqDG(z!l<m0ebG2CMn{wR)u z4i4+RGx@;aluK#si52!8=cLs2r-1`yePQ2``W<z=aPjK%U<n8#j5FY!zFRn<H5CEL zRT<q9cZGh`GI#N~dDOuf*xE>Y+r)V0NE_nTrA>mnlZ+n*4%sg5^)8d+lpWfCazwjL zFaPJvv%vz*g4#fDQ`QdbXd2MC6T|rC2s3`tz^eLQA5UiD`VlzXI5ftgS;wK#hrz8u z5_TKUB?XyCO!KQk!6l`PlxMC8BPVZGn0mgm0<SU&&^`riy^NF9iltNQ(ky6By?K64 z!-NU1F3XFPmaZ!kD;hxt7p63SlTsmVGD%cxPEPM<v~Bb7h$k{Jm&oykCnfrwJEhuJ z1(OXE4OaDP<G7~NfxmnIBkAK@J~-?&YQ4i*9Z;;adQfe2awpu$xAWp)e2H@ybvoX) z9B+V~qw$<5w$vI2FUcL<kh7x0|6L_Hlc-nPEwP+Twjkb|?bzohzb>VJ^53w|$KMqo z`B9bQ4Ms1d5T3k;`jI@}0eHiPLkgekEbLnmfB`&~zH?w6qLIxeei%B}j_X7ZEb^KE z-40yqf#Gz`klh40L3ui%>kT$=Zf@+rhG#dhA`72cV>?{%@zfK9{9P%({mU@=6*~~v zc4}z?ITY?KtV>q@>Po$T1#L?QEv`a5NjU)4r3>xYBgD(DOB34VGwK2->Ov(UU^_(% zp$ZQ*AW1vc;~{i+WV!BxM2DC0{fr~94!YyXev9z^Zv0?w_a}DWxp83q9p4N0S!mlW zHj1K2*n0Oab`CHWYVZKtAKDc^7`}^fAYt<H+YrwPE2C)aD!@s9CW?4QPWo%-^5Wyg zhc61y-Dr?!q<i4sg{<#;k>z;E<gkkl!=W1F``7;5XZ`X6{;?u^xc4`9=eRDrwpn10 zVRr`j5$Xq_Md0^sL>Jz0AGaXhuo&fs>0xE)Al&BqcY6x(mC+~9$XA`q58r<8U3@hP z<@(7sUccM~(otN0b+n)a=m(xYfO;7tPwiZzhng!0;fzQcLCLtZT{z=FN|~w`s<rnS z9778!f-qwKO*)k$?YfB&o|qk0j^r+yfi7)tfYjaKvo*9&1KYag`EN=Q-?vzQWCd2A z8iv9Mh1<e2eii5Jg6s)+oU)u;_dwma)3L`qWG)#6NcV4lt$Qb|=n&6;6tY@lP8f^t zJ}t~+_iQ|cEW`VnOLdl{i21M&AuXE*(J(6%8xp%^Tnh)$m~y){IB_oAx&bA9<qu+Y zfxaO->Q~rbC55ptr%BxuY2ZXQuZwaXu&w@xm4>!Iz8X>Dv_xJm{mO8P+?4i2TBlKr zPgIPWBw?X{6CV<tC=p&wKjc-a?S~yu+Yd%<|A0#1^P!4cFrjVZ4vnZ?sJ1l_)9=}L z)I}Q_i<sYgxrxYKxln-u0-n-K4B)G@E_?@kH02^NfY;4`WhYqyR*-l}*R}`8of5Nr z4NR0_aZNxQfOQBb0C?Dg?20r|N%?V}4l!K*n->Ouc7pL<D7e#<Ioe-*#JF+H&vRU< z5Ej)8%cDS<FtPiLkTO0(=zw|tQ)9gIUj49|J34B8XrxNTt&NN;N+qe))0X+d_+}v$ zBx}W(-p{a{jZmPlO(PzVMTxN1!jhk1b?f912+xpBXlbgR@|kX?uk0c6v`mcLB-bNF zB^`)=wBRGjvZHK5FrO;Io8neNSmJ+5{41VzP1EKtZuIM0;dAYvACg|F@kZ84S!~1` zNoCflRVU+eh^ox4*d_LcQ6ns`1q<Iya9=2}B9huSnfP_AXv!JWS}h|(;k$m&V&Cn4 zgc2Tn{j77KgRS&$BwkL*xSnNJs<Cpygq$LOlzy1i&*D4^kuAGu^<2$-XMmj)cQb2A zFcAU|>>F$9Mk&fAXkc<bJs+j=sq5}D2e*jO*#?ZyhV+$dd#E=Pv=7i75vvIF04oD+ zE=umyK@^ALeLui#!HMq;2>d6C@f<WbvcB868%1sY5EP_G;2q$Qg*zq6v=DQI=zIHr ztX$t?PLh(Fzn+y+2Ju@6UPRg36P12m<?RCtk>by?xJZ0CLonh7zwhw+x7Ej6^Y=w1 zocP;vCnM|H#(+G_1&RiUiaD?IN82I2W8;x`4A>3e7D9Dp-qv+)ZCW7q`wlgFdimJ~ za^wPj6Pri>iWV$ZzP5p?L>!l)$AmV2QC=~nJmz=FpYhxIUL;N)Q4C7f9_%3z>OrD` z4u??FMua}Y_Sh4`2{<06&05H%ENWul4zLW@2hH(c>l)xt7EE0<C*kL5gaF4I5-b$Y zoPAm9yAoJwj3Xsr=>xl&dRN2Y)x>gbG_#fW*p#@C6KHJR<8AnhG8C4kc+)X||L&M0 z<Ih5>@N)*)L2q5iVnV_tkPyOwB^$C0ct}>&YvOfC8N{OGA@L|U&LXuK+F<fj2jMWV zA7YJ|@b5GP>k{6GD;!e2xB<XN0lASj$~d*J)2SuE(PGujc(Sv>xEn6R7G_4dA-ScQ z1+Zt-DP3Vb?(@VLv560*SwjDR0+K=~kJ245`T{>Disj|L&;15C5g~s92h$N$k3NUw zdmgMRI<Z81HF*|jgRp_&gP$>Sh9mkh^^Do$X`%<dIs25@awbMlI3`J_#_W${Y+HGR zs^AZ5>Tvn%?2#D|Z~r}heK=pj#i8F}`cHf40P3~40+VoZnZJbV1E=tRo*wux^ZjQi z7vXRw@A}<#AA~z6X+JeFR`(Ux8E4;96LVG&&VWYQ1*sQ`;V96Z+xP@iD&*qgkFWE3 zq%0eV0({TKNCv0_n<WZ~L{j+RgTT7;Seb64h)f_>CwK+`t1&WI0}Ah;Xr<}~8W3Oy zMJy%&cfL_jvvJ;qt%J6I+d)~Ne1j2!)bS3_=EWkj2UEclCc=Wutpw%R9P~UO=Z36W zJpU(Yz+2|v!Iz}u7CEd)!Uz|ZOBvZBCfr+$oq=!RiS!Fkw9xJMbAJ%|iCGIyoZHG~ zv^eZ8q$D7mRFTL-dgvch2OUh@w8gnW*_Hy=L+L8aIl!`s@#u?x<-DV)<EGz$=Sghz z07aA&qQA(#OwzbKpME5AYO@|99@C>&S_3}k8!Hx=?IPk0FDqn?wvZ{3HqPWfc02z8 zgfUN}w@_Ia+kw-M6SZYNYOG2jFoH-@4BFO;EH6ZA&-VHcOXQ7j!YnwRr)ec&(5EWc zmZ+Isgo2@^(PK$}V@+_5Y|v&-vfD&cgeG|v=rK%4tWY;?R+UlSkdlPF)m9P(W88M$ zxKV<ph%4wb!xUr;Uen-{{0!_O&|E<ysdGl6-C}jw#}uKd82P{gOe40re-;-e=y&ov z2|*x&zzX{#!FW($SWjZwF)#dttW1%v<59VUB2EO6@+d2RC5svP+_;E?kj-$de)Rry zTeHre>@^hD@REuZ$AHW*NRla5k~r-Z1Wq$j%t9RXcRyb=EEn@~1`i8qOicu&9jCSA zM40O@O!-mI{N&Sv;BgQWe-1BA5}75>r@FjKa|Kmu>Dy`7d&!Wid^Xa>|FW*Lic?lR znl)7sNL53BxPCql!Tq!EspK9Km}jTxG#`$ZG$9foT)4_W_=uTmH%@@MNeYQP_niM4 zk9oxj5g}&Ik<um~I=e@@7#-WSX%HB%XJyx*i9EKc2A4kR0zmdV8=$l~{rK{Dc}QBL z$y)8S>5TG~n=S@&(Ua9gAoI7qHA9<nZ#Ir#V<&!pv5X#TVo}qbOEMRAD(=HiCIl${ zQ-^Q-Gf$&OpeTpp7Hq>9Js})8imSEi&p)|_!e8pqbIhrvh?I=k^T|lYZibP_E<zIq zZ4dnHo2zH9+jf|JNlmslpK&-Ohh%}IYz9c#XV>VK`a8{ejmI}-7p)*=c8oB<#NToc z3B`JUWFLV42WDz)0n8sPrcV_l$Jfym?RcI&#JqL1;UReWVF!Ma)D~@h)Q2F?1vAdy zZaaUdW8dTGpZ;ydyGC$6L96Axg9?XDwUcYn;X1HGg5EI~&9834Fo<}`$i?N9vNuQg zCD9@JG`WzVMKdvl8Wc#{siF`qFy02><sj>S2xU2>GVYR=l<?}3((N=(Q-`dk4%;<D z!)Qx2J7_iEkds_ddu=e6u0@FoZFGYTtN?8u+`1$&`4~s;h)av6MRsp$r}b{{eMvog zlfNq;haL_FLeKb(2Dza2y(HiZXgp>2zRl|+P+0=>jYegUiR#GQbD_pXYVFT1Q9Vw7 zf=2#^7N{B8JFuf^;NfWVub1C?9O+FppI@>Ik>#Y>IBGU)3d%{F2(j?;3R2+_VNiF2 zD?-Z(JuFfnSzb|ZyYtm2?+_LfQ|!bMOHC{RcsgTI;LM!IX?sin&U`5C!s_lzv)Mea zZRj}o!UAbL^<8OjYP=D;FpnM?U5P1w7fh~ZTMiGf?@kAHg+lEX<qc?dP=%fO=;F<; zR6Ra=%mLDk8t5h$z(2tDI9*uvH}=OZL#vs$8!oA`6cH}z!h~1_d4Ay?GmfONe(Jq= zfybbMmf?Q<wcWQcCyCvQ!R!&Tm4x$h#{1b7=uHpaW0`;o(X&bsS*rFGdv(%(npbzt zVl+^)LpzgM+U*={zT{E@$+d5yihU3MsEiT+I$kRoxrjXN#K)W-q+v1tParv}JQzm% zB&HYf!`?9#4~Z83_sCw--y@5e92PhjAP<9xL1Hx}ORTHFqLszLiG1?BdtCInLdjvw zG3A$eBSM0xq9y|N&v}GrWxFzetl-bC!?K~+3rtk_v;H^s)(8uZMcU#>w)UU3zwPA< z0On4JDXgRud7}<L1W=L%V<>mqQ1W7BfC+h7qv#B59M{Sn#;nEU$cdPBu95P_xvtdZ z^)t*92U*+ovP=Rj<cCx{{NHu>y09%wj|5mnQfc~Rz}gWU%?jEmU3A2M$Ag7MG?REY zbOT&enix*_@)Uf4BMUGl{<9xC9Gwy)73sFVKczBi-}U>qcMc-Nz>ff7@!<<s`E%wI zE%(`baVZ&LxzB3H;>vUqLP?-!A4Bu_>D3nr5GMUqD}Be?g)ezq^eqx8jdfZ_ifOk# z2RzM^C|WHC?Q5ZQc5e!QU_tk{B#>$byARoS)SCUdpH<v#pIxhZY1Q^_(F2y*OgF%B zAFTlXz@@M#nzhtxJKbOfE29}HX4zEr^;mwAIVnVB-(M2}*~#e!5EC=qV7kRbqX{kU zTBD8^Iwz&Bzs-%NlY7C<W`@Cw4_GYBiS76dgREUM@kLy|;aSyxr;p()<R=mD#YYCu zXGR!0T-bLdcva6f06yu$+QAte?esW~9ShIRjE-mUON;~fybj=Nn$ck_-E&*ISz}my zu*c8LL^0G;nR>{JtUQCpP*QP9nwdW;cB7h^KikAN<|pCJ%pU~CR@iqI6OzxBrYs<g znfb%Zq$j0nRUS=$5?4-5ze$_?3<FepwrWDwt&<Ct%65U|>zDaxnDqxQWjDfPwl|j9 zZi^(gnQ6s!8!^@-5wk)|U}jpi!XI5aMh$r4lTz)tgbE8x1BdY&6Y-q+#;j&ccvnmK z@T;C7)=rHJ6Q~$7(<+5qRCnYOpK0}A1}}a4^a&$Z&EO?}@*&o5<SI0q%1$}Sck}gV z0a<P~HQRFC2QNK>YS4`uJ1}@jSBjXyOWTIH<|}<2Mny=2mmX4smw2a!8N5Ue$ZF{i zlL$A7aDsO}SG{V-x)RNxD^fGOS;84Fcf@roaS#T4z3Erk_0!fUG!2E*Df^C^<QU-$ zF3iW#Yp@u9_e?b1{d`AJo55l`xb<S%SeBiP!r53UHJ{}dwa~(JH$#)H!8b*DTiRd~ z=$O$&<YgJnw{6Y0Y<i(2l7<@d&h%|Ht1jB1{ArPfFlrhjGl(<B;c8Y7(xV`%>mbg2 zpZh7(IrZ0j$_hq|F*Sov;pfaJv6(W8DWg1V8HH<q#nAa-XH}gh3Eg~M-=b5C?ZD~F z^Ov)0R502jQY7P|%Q(q|ABZ8&%?<hKCj5dJFC#9L>&P8purxoKokmIz18XwE(#1{E znoXKxx6>RrA0Tofnm^tjS%KBZ*l-p`frE2!;-LVXImAtdGrCWmuwMwwRJAziT48i) zdjlJPXHS2|A?~MvZQb&$LX@vTwTMtSuRju{s7jH7eV^H5eN7mrilkiN;%e<q;LI^t z<uWEmPkbEg5bjB<%QdRq&Ox(!NUq#U-o1SLXX-MGFOiQDx7XrSGdzz9*yyh+JUIC8 zecZ%*u;@<e!ooYm2ML_}FFuG-JJlJ%sOGqTQrJ|*c9w7%m2l+WN!+Qs?4=G3{(`l| zr1)(CU7AQ5iO%VH<Nd+0iql2ney*LO5FN4Dw<3GUW`n5ErFOwvf09E@qY*A8v$lt} zX9xHLY7EMetXzGXJAI*1KkU7)&XlY<?K5p`;>}S{NfkMqf)y%v&LA4Ceat66Nz!(I zaW2w#oAE~^5s!E*3+;Y{S-)kR7s~IYL)4O6s9SH31<9YshownRp<62KKP`7^vl<)Q z7ETh4Mpnchb_dH0)ikibJN@L_!SCV3bs{=%qQ1{YmU}Zh^obtEgL&y{y#A${?dbIA zu+dOZv*i<2>{m73FNk~K<M_Gc?5mi6GIvN;j6gHjWj@ZWa;*oxseF?Hdx(RsDogi7 zS#6)cCxC<IYfA?9EHVr!tCko#(ao*w;@dGhFLOvztI|bHNjC1h^XW^Ex<;5io<t9^ zF@xM&Py<i^eMH%jJ=kZ0#rwDs2VUcl@0+QMYc@`zu|tQaXLw#FB!y((BX8q>3K<Bk zajZ}18F&`tgM{M&`UHATY%%^Spb1*VQX*JIS%c92Yv8~eAdi90ICVU1fb*Rk1k%*8 zmJs^8!ajN|oI+ppt<c_Q!y&1Oy3ihD%R_2|{}I<Sf&GuEgM>#`;S3yTW((~;q{b;X zmQv)fJ!z{D(Z@mw;Tt`qlY<9;&`=yVEoin6B2JK6;Yl`OTquYqy+40_Nv>CSa7;O9 zm&!o_l5lpA3TV!Jk+l~eu(3a|f1`GRSg#D|V}4w=ZGq#5wm-h&2?%kKexIu&nwt%l z`_A1Q$8!18a5TCz971PI1~=T{aD8HT9}Njy1juzC!|=k!a@|AUxCa@3yJ6HB2hM)N z8;mU^ocr@P2*;M|re49e!iQzwzt15^$&1cn1uje0gB_&bPZBF7Bl3J7fEM!t?~eJv zFcooj=={8j|B3w2I#m%$GYE#wt{~%?AVXE}J%_8hv1L^dl{$WQS<m2_Y-$Dh+%{Jd z@JZl(3`hf5-+gDmT^ERd|0JYe0(%nJq3wy&WfL<<Iv~3xGNm<3v8VJ~=(}*ENE)L6 z5#0nz)ayU6N#I|*I8gh}fj1EP@WDQO`&eOr!21eth%UUihnEoFr%7og8iA@K-yQ4} z70GmY2<FLaloqzScXcW>RKm<VlRnyrHYv>0$GfJzR(z2P=SE0>v%3~J-+l?R+*(k% ziQtOx_UNG5>2-DTH}Y2-B9O!Z@sdt^9@lnb%qfAdvJ2Twsv-6oILPZ!79hJ~jZ|fu ze4&xeljHB=JUVxZ6K^m9m&Lhm?oE~{q3d{IWO>MY!Fl=)Cuu-V5<Tsgfiq72+Mh;~ z=`8JjGxe@~q)y6zdkjA!=i_^FWqqM`xhuA3F;%A#kL0VZuORinzOklm6oW1iY}Ak| z>sw$FVus|?OGZRTIgo|_m{Qt8=BWxh1&fG+VK4-Y(~FSpM771I<Y{O}B6B(=J;{7< zSb!(<!V4G;&!t?(;{M87M?XGFPXdk8MJFdBQ6#CG)xBSTlUv-S+@iz;&*LtbaJ0np zCBb*Q)NTP97COB841}0XIagq?P%KXQ1!N5|2oN>l<b*Difd#gkS=Xq2#&x3QiQW)d z31owLUO1EOg^En2l36*l<7x;`JkQcVB7<sqC|FTKl`2)@&-Te+ds_Q1CNsI&V`MfJ z6XZJ$GnOQO9(+xi$u<=-d6_d;Lf1=f9URtsXYXe)C=m|VPV3#?{9-D(CEw1mrtu|m zLf68Y>VPYaH{ux_>~#&|8?ZkPSfX|f9PEea(M_eM$!WHd8%QrB3tf)yhZVWCg%*!X zh2ri$VE!RGe>jo}5tyisi$AWgZ+Ie^AZviUf8tqxm+7|?R{EE?lHO|ZueypKRo*Mj zs^=V-z>@DsKU;D>j0d_79~7opH7lyTK@{f<QjB~SSa)pX2hI;*&QXrG0A5G^1pJO) zT*tF#{c6`%|8^MoQ{2E~yokD%fSkdv;8yNMg}<>2_)2|*c1SG{qyyQ1iR)6S0zws~ z6q-VRI*Jmvu?S~hUOn|xV6hQ(X5U?ot(9fmHrJKX%Nt#_+qw#^8-X27123hRF8Kwn zTX^CL5!#Lan_-LB(+o)+Jp>y}F~w&>WRtmxbCGix7B^giiRNAtq7?y<if@NWo1ouz zY{PVku537BK0r`Ff3iC(Ae7+(h(a5cPdVCuSyrDg5lG|n4Ww$v<ANi{8}Yy%6Q0N$ zp&m0pNDv$3bdm$k=cD6+;|M8w82gmNkAb*1Ks--@H(_PM4ebk0kLQ)fHh#SUGCJC4 zcGRy>{4(_Lx7?Xq4aTu;R;t$zk138GS>6yUJSjB~kM!xFR5{W;?ftcL*=sSHX+e5_ zHl9i_o`w;AhEpuSR;7O_?K3{nB6H7;<2fO9i2#vRLQqQKM7goYI5IY=9y0zoREdz6 z?b~q;vNVfqOBL3;x5g6+xJ&<%uxzW<_x)gSbpse2Dv_z{A`-s7LlFG(TF$U0<gy>0 zl)9<oOn!bYBD5UP&cu-m6EhHPMi$C{+WgZw7jdpA#S9#0%<1ow+{`Ssf+RmxxQD~5 zYyY174R9Av$@5(Q9;G~;SOIdjwh~X_ac0ZyhAb}V$!c?jjGtk)Z86)wL2&`y!x<)> zhvOW8QaOPjFm8Z=6tJzZjfrkUHxc?zL`M-NLZGhtXb<3jM^A&wv+tdd15l`c0u^|0 zN@rF%hF8cw=<3mLy-|PP$xSB9oXA-#zC<3)TFGQx2N%Sfqn-zspTT*<)l6lAwlgUL zqTdq@gcwGIL+EQtik0@g-RJDN*n6+u(%Z8Z7EjWqsWhP|lW0afA97A~;^60mS_=s| z1?d6rKcwcoq@PCyqpz-sijACq(L_jlR~wzqb3kC%NgE>TU8IS!vZ)~By3TcFVnw6u zt7?+;&foc*s6M+s^+=JwlnlNmy9`ap)V8ie-<_i6nRqQRxw8glG?d>$d&=&ck|?iy zB8j-?+D77NZ@1>P<rN~;6P>o0#zS#J5>Fs<z`zZ{4bas~B<ijMG`DMiDnA8mmq3nh z(EWzYytKHN@i}UZgZu=euF;ROJ_j;8m%ab^_VKcJ#y)qt|K9n~`=S5?n7Mt=c0?#J zDWWQ2$o`6oyZNTz4H@bf98I}cWH?Z@8UUo^E#jn+^pIFaNlz;t!mz9D-ANif+-pg+ zcoDN*oDVl<d-DaEuH^)O@)Qn3^mP(0v|I7OUtPjq0Uv#NL9ZGA{2AS|nSXx%?V|hj z;~y7a*!krjzq9VQuf3~JAHRP6)VsR8N<Ms?JC16Ho#xT35hB&|Ab;{o%2dkbAvSOd zfvnJCvMRUGs2x}S`CP~=juMpES51$yEVtjkh}AWN?OV^Nfnzp*omj4owhKf5*7Ylj zl#wAz=ugL5Tv2%ZWELm}^lq>)t57dbp_8pL3X{l9wIoAjw3XoymE&amWfw>)acGLT z2I_KN)0WEpk!{E<k@T(={@6J(^R~$+NOLMQGU{1@Q<11MR9NE>{jrKWVrp7p^@6~n zN<=milw;b{X6>whUQ-an#ba9diFR;>F78{onr;GGPO&_|vq>pFV?cY^`}*zjLXt3( z#@PAd0Y(X8_9iqFZ%d`l8mjRw^y?b7cwN~I3#c~q7fMGTQ@20I0*EmHNtu~=hFZE! zvH6u{z<wE6k=5cL$heuG4}?IA6`DeE6j78x-M)x5G5CXj=S+(K64+x*V;och|E}U) zw=jn*tw-WdahBa(7>{q{vy6z5FqRQhAkh7u%)N!~x#*zPogZ!`x_0n)m`cLG;pGjI z;jEY9tZ*q`;V37=PZ#zb2TOM__DgR3M##M3Uhu+9ugU=DU#xo@d_)NT`?nU_fB9U5 z2k|3$I!{!8FlU|G`&uUtNU?Uda2FJedZ{HO3xA=xLW1`3gdv<~$eS!N{+wn#A|j&6 z`k2j+;XM<?M)9F<k}-<^^l?5p>o(8M>ob-R-Lu8rnDXr$a1&pm%`|C}zO$&&o-s|* z`+uF^KYv=KA>!zu(dZtoOn3QqPWSiSX7jx`n8nb4{e|g%);s<7;lsy^504AHOv!j! zRk6U!x35BY(+Trj0$)^!z+oB{%!nV*P^Mp*e;wA?U)<=|x7_ut@KC0FJH~k60CT#= z<r>b5+-EiXzp;nGH#lvh;3JymI;qiz_N3e|mpU~}bt-l0CHz^lTHTAktuDTe{M^DX zYZiZhS^N?IvikhXKJYL5z`so5a+D~NN(+sMt)ABE2Tc|0EXfwl$V0(nLZPB1Nd{Rx zhb5l{f4Lq1S#LG|7PH+&2W&{}K)gdCcli_jM2xx5J`s)aW1V*5Ub>-lI|hUC8|X*6 z;X%HEn00mw|AlT6=dh>0sw7x<cB^16{>1oyJadnZ<USGcJf6T$R82qOpas6<uX5Bn zrZ3^g^rr79&Chq3f6we}U;bT|I~iHh3aXXlvG|D|i}8Au(D^~{(!j4YQ91b?cWBVR zl+O{rF1&eKW;?y+aiglD%-&aUvPV`nbrD1GQ1;c+yRNRLT$mcEWEnc2(;>9WHeG3d zR=2LRudWfRm;U|t?As^YuB8zz>C8#KJU}?*qiIPCXws7B6GiST1d>7d0GDc2et~0W z(wF&F*S?7=_B{@uu8dKQMB?{^iTeXOhB5D>BK9S>R$aaEkY^&bmON0ZUxsU1=N_51 zR9V#Kx>Kd}_2ch7^z~y<u&!1X(z1hpx^bC|sOx5Waveo?BSk{-kg`Kf{(IIs)x}-@ zB+mjpRIdFf^2d3f-B&Qa)}0RQ$`3p6p(6=b^N1Wao7L_?PsPBla3U5N+xWG$R+mqw zmb`3rNeEXA{#6At{at&R0y^#-oOVwYWWs^~5`N;c<tR&#g5^Ldt*{(jm~KUXp3{v; z%P6Fo{7{&+Y&n{dX3^1AFDKLHia1VN*T}<&oCxFa5jB%j!haEh6W?=OL?Au01B*0D z)ERjb-QL0bj*=Crxb_i_{JY&E$V$#>z0o*mDCwNWbh&c|#RICjpW3M(_4we?00(Hs zwfv^IsGgQ6@DHG`E6pPIORZ9Wn*}Y`2HG8Any4~8Rr3ks$AiKO(LuJbNXf79(8%Q_ zvflAww|T5!=+LI%yGUsCq||b;sUFli2aN^18o#KXW=Mv31{Mzf0n^orNJaWBUYdHV zC{WnT3DxW!)Xol66d57$yE<5PhFysdHJxiZ-ZNR~5vj*^ZE<!zZ>{-%HFc^{kqilS z*R36%o$GT*N}NB<u1P&=6e@w8JV6CySpc8pwg$?$SOcRaM&<)V^lP}u=kPZ%Vo@Mx z=cvULtd*dAwbtQ2BQQW2KkfZ@eII@%P_no{09gP5Q~#XOukk;7z|3+uVdi=KG5?Im z@Mp#k-J=WX=L+C$>fcj;{`2f#{`3Z3BKPTy?9*|9Kb`)9Ui*N*ca#5n$p1Z}e^2@K z(`IRpLwz}-^OsMxU#veHi%?JcfIsxlX5NPl@nPf71L@POK1_lS?k9EXhdmWhg82-@ zw`WOxOiM3a2IvxKHY_K6u=i)}Z!uF#AJpRyh`SQVvy9`FZm;cs{aG)14*!6jQ?fXq zwg~A9Zso#7Uxy#l-@Fv>8~YsVVteDS5D4HAVRl!6`^JB@2>h*qYqG%K<xaP{=%8Ex zZ6eiLiU8M<wS#?jKzQwC3QK9K>>fHO7G7;B@(OT4>V-FLz_DtD^>!^46qVdofT<qv z+YC%~UO7>ABtX7@gUJoiA=>r~Om!MKXoP>xxe|q^-^Na^wyweJ0H_*6<j-a19qq=` z=YtiB0vVz-AeHw^JOG%8iGC@ZD&a+N+q#I<Wqw|a@zFcZAS-Slw;COMo=dG|Y#Jl$ zv}V)gA#m;rl||sScNkJkN_K5tRF_gK;&3&?uEKdlk6;mhnY4^X7cyiDx?TppimF}I zCcX<ec@m36WfucqO#;gek0vbio1q1GZ&i^VNP!{~LTRZQmb(rHp8JerGMDk<uEBGQ z#7avUS}?DPMj$0&u*L)!eMYri#9Bm*vs%4|Q*0G<e|8Z|T!i)(@b6`GDnJ@n8yaOI zmRr_>6&fsm^{j;OY${{NW4*L7GQjY8#{GG%QVfik0mGMRzr*ICqQ{i&qLnhx{O~0w zCl}V$^LR}?$F1P?2|RdRnOMcWqq`C5s7H{t=^psWTJmmo52R4|eD3x#1AKf~J3l&9 zF-)wtj*4DfafQ;JjWsV9t$-qQv-Qsv_wYuU6-beP#1DeM)TK|lH;4Dj%>I#jeu`GC zxcKDz8GKqfAL=gVwihjqB<uX>sCTa9;m0&s9+h#FTuL-QzGx9zQV0u68f1#r#k0iC z=6O@ej%_ivzf|<{iW8*`N8BFT-k_3yxPaVjB$|hcma4XSn)tx<6}`IRRLWOw5S`?( zhN5+UagrP#95<8{ooc0U=7g36S%Rlldp)idMwd_mc3=-aTSNOau&rAjB}MtHmpTE& zGy<OcUKGL$wA9QK(U|aB)${?H_6v>?`pM)6VX)9IYx)3RpqXb!`v8la7hy9`59_sh zUBO&azGXB`jU{Lp0%?BcFwLmF!r2>|(Rc@c+UFkYtk;hs_WdNl8N`n7l_zj#?Q(n& z2eMqX>VLnjqX)Iba4H8M3sa<WC|*)`BEkx7kNVMVA#<W&$!vxGd(Ad}6K#)0LZo)A zTM*F}pDI$cOwtvmhf_gmUD`sn3luXwoSf^D!W&O=it|&FOF{*y+ZkwjICY_v>EXnG z+=V!n3zW`uX6>|smdW&RnjTIGU_I)1p>tB|rUsorF+LZ<#q@BJ>tK2~O%LZ51`F-_ zh=jy}BM~w^oX_0DnH&&fItYtrLYNLhWyTGf4#Jnmha|`SL?e_*M!q}9#!HDp*D`%O zFUie12ooJ?`q$LNC7J#;1=|X<N<qPYB#JWqYc-&1p)^N0+}rVnC#B}$5n&(hT7U23 z@^{NUDbeI=aZRBVntuIj?KkXZ>h*C>oyQ2LE^#R>hjx9E7%+-Rwtn={3lm>L@r6GU zeybe|ZVP{O$>ZQWD6S=loR=Z~lV6wI`-JqOMM0c(#33HlvK3bNsYhcg>W?aaeam&r zz=2q3X8=MuJmD_D-rk=$^aZE2l*&MV7}n{AoEi@QSAEub^6L`oykS7K8{Ls$RV6We zB@7VQ|Cl=HYnXFEe`NP>VX+@q1;>r*Vg3E=K-V+-#+tejuQyAde5On9yUphNE(fYk z1oqJZ@7=Y?2RJF!cEDh4#~GA=m~tI`L;?=#RucQbglXu@{nNSb!TW0Sv~!q8SoxDx z2zykmy`&qs_V$4z;jt#(f$hEhaGHkf7CH#0=Lg5VZ5>6w=~aL?^6}XvaLX0f004$Q zt^s6rxJ+pP`IFbpD2gbCM>u;qPYj1wf1ifYN?dVNJM3UgB4j9_lX+5qTp@pAxMK5R z?-n#gdjW%-P*&tZW1?!q<rFbpfuHU1Bzm|S2G(RGX}V;Bw(wFmi0at_Z3?vbD!O}< z-rH+2@<(R}r)S$50J{bDcuaJ=hll4qoz_F5tF5rMp>!seYe$isqJzT8XjJXlOdDg6 zuRx9dr1X4oy7UoOvM@-0GWv53MB_H>L7x7Ub<aV!eqP<y@Vad*iIgf0uel1)*O;{p z^4fNd{dObgu!^$nb&pPuazje_6BANu5mM$`U7maj{HZrsDa}wEz?kF{>b-IJs*NYs z=H#DP{oBHP1Jw~?dDmuH`K)eq-liN(Z5ToDcZe#yy_CTlr-vASwYjB<E?aQG41?q3 z<xTHvDuU9C!THh9SCP}d4P`dZtuz+faQTx}{5n%YE@+Kgn>j(M*o}<ZD?ox|Ql;xX z@+XFfnNG%a`Wt_Si1{k|#t+I)jX9oN=v~N09(Nk2U1c%?Y2Hl38?uqVB5E`Jx_kd4 zz2qtiQB>ICI6p~$W~2(L>kF7}rJ7^|X}98#CfNsRa}=bvb0cGI79>lz{7u`ny<s#e z-vGL`urx&o@JMQ!P*Kh!bCtCt%RU?X1DgimBfraW;55hW1SgS83P*ANOC+60q=Krf z*AI_h9J;m+;_n4j<T|fe2sDa-$nXJEk7B4|jAAeSm-k<P-bv<vbgg%J`Nt*uc=3q; zqMbM+`<ciw2lWG+|I%{25&E{+W$!<}eZ1_QEl^A!;{oD0HQp`p(lkk?GHir4?EKqB z_v^<$F4)H}?DvmfzI?p+K%({a-+Jtl^)CMN<K-V0zxOV_zVxcsTy48ZdA#&G)}h`C zKFunvJ94mpa4EUZiBJ7Av4s)_bDe!nJdPJMoKJaOa*)EvpOj|?^O=)0CWd^j%uV}$ zB|SxqN~Th3=G?Yeo8FwFnPWeblUs$dyWXbz<mSafg<U<UHaeXx70;ghx}>m0ujS9Q z+Zk?9s%iTtxdCHl?BF{ZFYo+d5VFW;)_30-u<Pl6Fl6Ovh)<B2k48>73kFxP^1IF> zPu93EqcNWRx}-4@4ygzZN!m9{H`c9vb&ohy{PZyUiJufnzx93B4_1i?cAZ_GETb>O zE>C{lw1L@%S~)zg*N;zU9es~Qj`HmqlzpGP@r8V{)uiK-Ul)9mUkiToOc}Y&zxgC^ z##Zouu<-s#LPO%!?W7rhW>IY`7*5Bw7qQjnF392)=W!0|wZm?ACZef4j(ocY(kNL? zZp%PSKCGu&J*_sY$q=99>gM}Y;?3L+yFA<S3Z)%9SK;gy7h3o+#!{kTp;Wll9gzg+ zrw9&xJVP$Mkyb>SdLeZpi-wUTBS~D%EKL1>D3m0AWPuSS;PQ<qk#<?7I`v33r_iO` zstSI2qr|1i9#qIU(G<gQw~Z46{BoArVFUXbi62beYB8Srxqe{56)sMPbnz<keK$1b z?Ae%f_hqnc+p&D5P6o~Th5hpE%0A=8#$P6Zf9=}iJw_MqBgu{Iqac}FO75pCbaRn^ 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�KoT_|uuA*>K>RQKut|aFfFEGNfj0J?Z~trj;4+ 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 Q78RHZyuw<YcnS#kFZ*K*l>h($ delta 86131 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 W7XyAsRuYDr$AI}MWuh(sLH`0dVWmF+ -- GitLab