From 538da7218318f2de40801c3518c896b890e79d3f Mon Sep 17 00:00:00 2001
From: gmillot <gael.millot@pasteur.fr>
Date: Sun, 19 Apr 2020 21:33:38 +0200
Subject: [PATCH] fun_gg_boxplot() color with tidy and dot.categ.class.order
 seem fixed, remain y.tick.nb to solve, because of ggplot::ylim() that redraw
 breaks

---
 boxplot_examples.R        |    5 +-
 cute_little_R_functions.R | 1783 +++++++++++++++++++++++++++++++++++++
 fun_gg_boxplot.docx       |  Bin 95009 -> 98177 bytes
 3 files changed, 1787 insertions(+), 1 deletion(-)

diff --git a/boxplot_examples.R b/boxplot_examples.R
index ec654cb..b13579f 100644
--- a/boxplot_examples.R
+++ b/boxplot_examples.R
@@ -2,7 +2,7 @@
 ### nice representation (1)
 obs1 <- data.frame(Time = 1:20, Group1 = rep(c("G", "H"), times = 10), Group2 = rep(c("A", "B"), each = 10)) ; fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), categ.class.order = list(NULL, c("B", "A")), categ.legend.name = "LEGEND", categ.color = NULL, box.width = 0.3, box.whisker.width = 0.8, dot.color = "same", dot.jitter = 0.5, dot.size = 3.5, dot.border.size = 0.2, dot.alpha = 0.5, y.lim = c(10, 25), y.include.zero = TRUE, stat.disp = "above", stat.size = 4, x.lab = "GROUP", y.lab = "VALUE", text.size = 12, title = "GRAPH1", title.text.size = 8, text.angle = 0, article = TRUE, grid = TRUE)
 ### nice representation (2)
-set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(24, 0), rnorm(24, -10), rnorm(24, 10), rnorm(24, 20)), Group1 = rep(c("CAT", "DOG"), times = 48), Group2 = rep(c("A", "B", "C", "D"), each = 24)) ; set.seed(NULL) ; fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), categ.class.order = list(NULL, c("B", "A", "D", "C")), categ.legend.name = "LEGEND", categ.color = NULL, box.width = 0.8, dot.color = "grey50", dot.tidy = TRUE, dot.tidy.bin.nb = 60, dot.size = 3.5, dot.border.size = 0.2, dot.alpha = 0.5, y.lim= c(-20, 30), stat.disp = "above", stat.size = 4, stat.dist = 1, x.lab = "GROUP", y.lab = "VALUE", vertical = FALSE, text.size = 12, title = "GRAPH1", title.text.size = 8, text.angle = 45, article = FALSE)
+set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(24, 0), rnorm(24, -10), rnorm(24, 10), rnorm(24, 20)), Group1 = rep(c("CAT", "DOG"), times = 48), Group2 = rep(c("A", "B", "C", "D"), each = 24)) ; set.seed(NULL) ; fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), categ.class.order = list(NULL, c("B", "A", "D", "C")), categ.legend.name = "LEGEND", categ.color = NULL, box.width = 0.8, dot.color = "same", dot.tidy = TRUE, dot.tidy.bin.nb = 60, dot.size = 3.5, dot.border.size = 0.2, dot.alpha = 0.5, y.lim= c(-20, 30), stat.disp = "above", stat.size = 4, stat.dist = 1, x.lab = "GROUP", y.lab = "VALUE", vertical = FALSE, text.size = 12, title = "GRAPH1", title.text.size = 8, text.angle = 45, article = FALSE)
 ### separate boxes. Simple example
 set.seed(1) ; obs1 <- data.frame(Time = c(rnorm(10), rnorm(10) + 2), Group1 = rep(c("G", "H"), each = 10)) ; 
 fun_gg_boxplot(data1 = obs1, y = "Time", categ = "Group1")
@@ -114,3 +114,6 @@ obs1 <- data.frame(x = 1:20, Group1 = rep(c("G", "H"), times = 10), Group2 = rep
 obs1 <- data.frame(Time = 1:1000, Group1 = rep(c("G", "H"), times = 500), Group2 = rep(LETTERS[1:5], each = 200)) ; a <- fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), dot.color = "same", dot.tidy = TRUE, dot.tidy.bin.nb = 100, return = TRUE, dot.categ = "Group2", dot.categ.class.order=c("B", "D", "E", "A", "C")) # error with dot.categ.class.order
 
 obs1 <- data.frame(Time = 1:1000, Group1 = rep(c("G", "H"), times = 500), Group2 = rep(LETTERS[1:5], each = 200)) ; a <- fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), dot.color = "same", dot.tidy = TRUE, dot.tidy.bin.nb = 100, return = TRUE, dot.categ = "Group2", dot.categ.class.order=c("A", "B", "C", "D", "E")) # error with dot.categ.class.order
+
+set.seed(1) ; obs1 <- data.frame(Time = c(sort(rnorm(10)), sort(rnorm(10)) + 2), Group1 = rep(c("G", "H"), each = 10), Group2 = rep(c("A", "B"), time = 10), Group3 = rep(c("I", "J", "K", "L"), time = 5)) ; set.seed(NULL) ; obs1 ; # obs1$Time[1:10] <- NA ;
+a <- fun_gg_boxplot(data1 = obs1, y = "Time", categ = c("Group1", "Group2"), dot.color = 1:4, dot.tidy = FALSE, dot.tidy.bin.nb = 100, return = TRUE, dot.categ = "Group3") # error with dot.categ.class.order
\ No newline at end of file
diff --git a/cute_little_R_functions.R b/cute_little_R_functions.R
index 849a1e6..ce645ee 100644
--- a/cute_little_R_functions.R
+++ b/cute_little_R_functions.R
@@ -6970,3 +6970,1786 @@ 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
+
+
+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, 
+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 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)
+# 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, 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 ; 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 ; 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 ; 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)
+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 <- ggplot2::ggplot_build(eval(parse(text = paste(paste0(tempo.gg.name, 1:tempo.gg.count), collapse = " + "))))
+dot.coord <- tempo$data[[1]]
+ini.box.coord <- tempo$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.mean <- data.frame(tempo.mean[order(tempo.mean$BOX, tempo.mean$PANEL), ], 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]))
+}
+}
+# 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{
+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
+if(is.null(dot.color)){ # text just above boxs
+# performed twice: first for y values >=0, then y values < 0, because only a single value allowed for hjust anf vjust
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "text", 
+x = box.coord$x[box.coord$middle >= 0], 
+y = box.coord$middle[box.coord$middle >= 0], 
+label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[box.coord$middle >= 0]}else{fun_round(box.coord$MEAN, 2)[box.coord$MEAN >= 0]}, 
+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
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "text", 
+x = box.coord$x[box.coord$middle < 0], 
+y = box.coord$middle[box.coord$middle < 0], 
+label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[box.coord$middle < 0]}else{fun_round(box.coord$MEAN, 2)[box.coord$MEAN < 0]}, 
+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
+}else{ # text just above error boxs or dots
+# I checked that text.coord and box.coord have the same x and group column content. Thus, ok to use them together
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "text", 
+x = text.coord$x[box.coord$middle >= 0], 
+y = text.coord$text.max.pos[box.coord$middle >= 0], 
+label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[box.coord$middle >= 0]}else{fun_round(box.coord$MEAN, 2)[box.coord$MEAN >= 0]}, 
+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
+assign(paste0(tempo.gg.name, tempo.gg.count <- tempo.gg.count + 1), ggplot2::annotate(
+geom = "text", 
+x = text.coord$x[box.coord$middle < 0], 
+y = text.coord$text.min.pos[box.coord$middle < 0], 
+label = if(stat.disp.mean == FALSE){fun_round(box.coord$middle, 2)[box.coord$middle < 0]}else{fun_round(box.coord$MEAN, 2)[box.coord$MEAN < 0]}, 
+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::ylim(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
+# 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::ylim(y.lim)) # 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)
+
+
+
+
+# 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
+suppressMessages(suppressWarnings(print(fin.plot)))
+# 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
+}
+
+
+
diff --git a/fun_gg_boxplot.docx b/fun_gg_boxplot.docx
index 33c0c50f5e863d983060c4c2d9e966a7cb065332..9672a8628f42d968af89d2fecbe855771cfea590 100644
GIT binary patch
delta 83164
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
O--{Sk*pzA*fvN#?4La2T

delta 80043
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%0A8ZrgaIEop5+rc
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
z%0D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

-- 
GitLab