R/gg_dotplotmulti.R

#' gg_dotplotmulti
#'
#' Cré le même graphique que \code{gg_dotplot()}, mais plus petit, car affichage de 5 graphiques par ligne.
#'
#' @param x data.
#' @param max.ratio Valeur maximale de l'axe.
#' @param cvslabel Valeur parmi la variable \code{cvs} servant de référence. Les limites associées à ce CVS de référence serviront à identifier les outliers.
#'
#' @return Sauvegarde d'une image, geom_dotplot.
#' @import data.table
#' @import plyr
#' @import dplyr
#' @import ggplot2
#' @import latex2exp
#' @export
gg_dotplotmulti <- function(x, max.ratio = 3, cvslabel = 3){

  # Arrangement x
  x <- x %>%
    select(an, code, CVS, cv, thetaj,
           liminf = paste0("liminf_cvs",cvslabel),
           limsup = paste0("limsup_cvs",cvslabel)) %>%
    as.data.table()
  x[, Outlier := FALSE]
  x[thetaj < liminf | thetaj > limsup, Outlier := TRUE]
  setorder(x, -CVS)
  x <- precision(x, "cv", prec.suff, prec.lim)
  x[, code := paste0(variable.code," : ",code,
                     "\nCVS = ", format(round(CVS, 1), nsmall = 1, decimal.mark = ","),
                     "\nPréc = ", prec)]
  # Ajouter des codes vides pour faire 5 codes par ligne
  if(length(unique(x$code)) %% 5){
    x <- as.data.table(rbind.fill(x, data.table(
      an = 1,
      code = sapply(seq(5 - (length(unique(x$code)) %% 5)), function(x){paste(rep(" ", x), collapse = "")}),
      CVS = 1,
      cv = 1,
      thetaj = NA,
      liminf = 1,
      limsup = 1,
      Outlier = FALSE,
      prec = "Ins."
    )))
  }
  x[, code := factor(code, levels = unique(x$code))]


  # Création dossier pour stocker photos
  dir.create("dotplot_multi")  # création dossier
  setwd(paste0(getwd(),"/","dotplot_multi"))  # working directory

  # Créer + sauvegarde des graphes
  i = 1
  while(i <= ceiling(length(unique(x$code))/5)){
    code_select <- unique(x$code)[seq(5*(i-1)+1, 5 * i)]
    tab <- x[code %in% code_select]

    # Créer
    ggplot(tab, aes(thetaj, fill = Outlier, color = Outlier)) +
      geom_dotplot(stackdir = "center",
                   dotsize = 0.5) +
      scale_fill_manual(values = c("blue", "blue")) +
      scale_color_manual(values = c("blue", "blue")) +
      scale_x_continuous(limits = c(0, max.ratio)) +
      labs(x = TeX("$\\hat{\\theta}_{j}$")) +
      theme(
        panel.background = element_blank(),  # fond blanc
        legend.position = c(0.9, 0.9),  # droite + haut
        axis.ticks.x = element_blank(),  # supprimer ticks
        axis.title.x = element_blank(),  # supprimer titre
        axis.text.x = element_blank(),  # supprimer valeurs ticks
        axis.title.y = element_text(size = 15)
      ) +
      coord_flip() +
      guides(fill = FALSE,
             color = FALSE) +
      facet_wrap(~code, ncol = 5)

    # Sauvegarde
    ggsave(filename = paste0(i,".png"),
           device = "png",
           width = 7, height = 2.1, units = "in")

    i = i + 1
  }

}
INESSSQC/variation documentation built on July 3, 2019, 11:33 a.m.