layout.R 20.6 KB
Newer Older
Heraut Louis's avatar
Heraut Louis committed
# \\\
Heraut Louis's avatar
Heraut Louis committed
# Copyright 2021-2022 Louis Héraut*1
Heraut Louis's avatar
Heraut Louis committed
#
# *1   INRAE, France
#      louis.heraut@inrae.fr
#
# This file is part of ash R toolbox.
#
# ash R toolbox is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# ash R toolbox is distributed in the hope that it will be useful, but 
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ash R toolbox.  If not, see <https://www.gnu.org/licenses/>.
# ///
#
#
# plotting/layout.R
#
Heraut Louis's avatar
Heraut Louis committed
# Regroups general parameters about plotting like the theme used ang
# color management. It mainly deals with the calling to specific
# plotting functions and the organisation of each plot for the
# generation of the PDF.
Heraut Louis's avatar
Heraut Louis committed


Heraut Louis's avatar
Heraut Louis committed
# Usefull library
library(ggplot2)
library(scales)
library(qpdf)
library(gridExtra)
library(gridtext)
library(dplyr)
library(grid)
library(ggh4x)
library(RColorBrewer)
Heraut Louis's avatar
Heraut Louis committed
library(rgdal)
library(shadowtext)
Heraut Louis's avatar
Heraut Louis committed
library(png)
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
# Sourcing R file
Heraut Louis's avatar
Heraut Louis committed
source('plotting/datasheet.R', encoding='UTF-8')
source('plotting/map.R', encoding='UTF-8')
source('plotting/matrix.R', encoding='UTF-8')
source('plotting/break.R', encoding='UTF-8')
Heraut Louis's avatar
Heraut Louis committed
source('plotting/tools.R', encoding='UTF-8')
Heraut Louis's avatar
Heraut Louis committed


Heraut Louis's avatar
Heraut Louis committed
## 1. PERSONALISATION ________________________________________________
### 1.1. Personal theme ______________________________________________
Heraut Louis's avatar
Heraut Louis committed
theme_ash =
    theme(
        # White background
        panel.background=element_rect(fill='white'),
        # Font
        text=element_text(family='sans'),
        # Border of plot
        panel.border = element_rect(color="grey85",
                                    fill=NA,
                                    size=0.7),
        # Grid
        panel.grid.major.x=element_blank(),
        panel.grid.major.y=element_blank(),
        # Ticks marker
        axis.ticks.x=element_line(color='grey75', size=0.3),
        axis.ticks.y=element_line(color='grey75', size=0.3),
        # Ticks label
        axis.text.x=element_text(color='grey40'),
        axis.text.y=element_text(color='grey40'),
        # Ticks length
        axis.ticks.length=unit(1.5, 'mm'),
        # Ticks minor
        ggh4x.axis.ticks.length.minor=rel(0.5),
        # Title
Heraut Louis's avatar
Heraut Louis committed
        plot.title=element_blank(),
Heraut Louis's avatar
Heraut Louis committed
        # Axis title
        axis.title.x=element_blank(),
Heraut Louis's avatar
Heraut Louis committed
        axis.title.y=element_text(size=9, vjust=1.2, 
                                  hjust=0.5, color='grey20'),
Heraut Louis's avatar
Heraut Louis committed
        # Axis line
        axis.line.x=element_blank(),
        axis.line.y=element_blank(),
        )

Heraut Louis's avatar
Heraut Louis committed
### 1.2. Color palette _______________________________________________
Heraut Louis's avatar
Heraut Louis committed
palette_perso = c('#0f3b57', # cold
Heraut Louis's avatar
Heraut Louis committed
                  '#1d7881',
                  '#80c4a9',
Heraut Louis's avatar
Heraut Louis committed
                  '#e2dac6', # mid
Heraut Louis's avatar
Heraut Louis committed
                  '#fadfad',
                  '#d08363',
Heraut Louis's avatar
Heraut Louis committed
                  '#7e392f') # hot
Heraut Louis's avatar
Heraut Louis committed


Heraut Louis's avatar
Heraut Louis committed
## 2. USEFUL GENERICAL PLOT __________________________________________
### 2.1. Void plot ___________________________________________________
Heraut Louis's avatar
Heraut Louis committed
# A plot completly blank
void = ggplot() + geom_blank(aes(1,1)) +
    theme(
        plot.background = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(),
        panel.background = element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        axis.text.x = element_blank(), 
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        axis.line = element_blank()
    )

Heraut Louis's avatar
Heraut Louis committed
### 2.2. Contour void plot ___________________________________________
Heraut Louis's avatar
Heraut Louis committed
# A plot completly blank with a contour
contour = void +
    theme(plot.background=element_rect(fill=NA, color="#EC4899"),
          plot.margin=margin(t=0, r=0, b=0, l=0, unit="mm"))

Heraut Louis's avatar
Heraut Louis committed
## 3. LAYOUT _________________________________________________________
Heraut Louis's avatar
Heraut Louis committed
# Generates a PDF that gather datasheets, map and summarize matrix about the trend analyses realised on selected stations
datasheet_layout = function (df_data, df_meta, layout_matrix,
Heraut Louis's avatar
Heraut Louis committed
                             toplot=c('datasheet', 'matrix', 'map'),
Heraut Louis's avatar
Heraut Louis committed
                             figdir='', filedir_opt='', filename_opt='',
                             variable='', df_trend=NULL,
Heraut Louis's avatar
Heraut Louis committed
                             alpha=0.1, unit2day=365.25, var='',
                             type='', glose='', trend_period=NULL,
Heraut Louis's avatar
Heraut Louis committed
                             mean_period=NULL, axis_xlim=NULL,
                             missRect=FALSE, time_header=NULL,
                             info_header=TRUE, foot_note=FALSE,
                             info_ratio=1, time_ratio=2,
Heraut Louis's avatar
Heraut Louis committed
                             var_ratio=3, foot_height=1,
Heraut Louis's avatar
Heraut Louis committed
                             df_shapefile=NULL,
Heraut Louis's avatar
Heraut Louis committed
                             resources_path=NULL,
                             logo_dir=NULL,
Heraut Louis's avatar
Heraut Louis committed
                             AEAGlogo_file=NULL,
                             INRAElogo_file=NULL,
                             FRlogo_file=NULL) {
Heraut Louis's avatar
Heraut Louis committed

    # Name of the document
Heraut Louis's avatar
Heraut Louis committed
    outfile = "Panels"
Heraut Louis's avatar
Heraut Louis committed
    # If there is an option to mention in the filename it adds it
Heraut Louis's avatar
Heraut Louis committed
    if (filename_opt != '') {
        outfile = paste(outfile, '_', filename_opt, sep='')
    }
Heraut Louis's avatar
Heraut Louis committed
    # Add the 'pdf' extensionto the name
Heraut Louis's avatar
Heraut Louis committed
    outfile = paste(outfile, '.pdf', sep='')

    # If there is not a dedicated figure directory it creats one
    outdir = file.path(figdir, filedir_opt, sep='')
    if (!(file.exists(outdir))) {
        dir.create(outdir)
    }

Heraut Louis's avatar
Heraut Louis committed
    # Names of a temporary directory to store all the independent pages
Heraut Louis's avatar
Heraut Louis committed
    outdirTmp = file.path(outdir, 'tmp')
Heraut Louis's avatar
Heraut Louis committed
    # Creates it if it does not exist
Heraut Louis's avatar
Heraut Louis committed
    if (!(file.exists(outdirTmp))) {
        dir.create(outdirTmp)
Heraut Louis's avatar
Heraut Louis committed
    # If it already exists it deletes the pre-existent directory
    # and recreates one
Heraut Louis's avatar
Heraut Louis committed
    } else {
        unlink(outdirTmp, recursive=TRUE)
        dir.create(outdirTmp)
Heraut Louis's avatar
Heraut Louis committed
    }

Heraut Louis's avatar
Heraut Louis committed
    # Number of type/variable
Heraut Louis's avatar
Heraut Louis committed
    nbp = length(df_data)

Heraut Louis's avatar
Heraut Louis committed
    # Convert data tibble to list of tibble if it is not the case
Heraut Louis's avatar
Heraut Louis committed
    if (all(class(df_data) != 'list')) {
        df_data = list(df_data)
    }

Heraut Louis's avatar
Heraut Louis committed
    if (all(class(df_trend) != 'list')) {
        df_trend = list(df_trend)
        if (length(df_trend) == 1) {
Heraut Louis's avatar
Heraut Louis committed
            df_trend = replicate(nbp, df_trend)
        }}

Heraut Louis's avatar
Heraut Louis committed
    if (all(class(alpha) != 'list')) {
        alpha = list(alpha)
Heraut Louis's avatar
Heraut Louis committed
        # If there is only one value
Heraut Louis's avatar
Heraut Louis committed
        if (length(alpha) == 1) {
Heraut Louis's avatar
Heraut Louis committed
            # Replicates the value the number of times that there
            # is of studied variables
Heraut Louis's avatar
Heraut Louis committed
            alpha = replicate(nbp, alpha)
Heraut Louis's avatar
Heraut Louis committed
        }}
Heraut Louis's avatar
Heraut Louis committed

    # Same
Heraut Louis's avatar
Heraut Louis committed
    if (all(class(unit2day) != 'list')) {
        unit2day = list(unit2day)
        if (length(unit2day) == 1) {
            unit2day = replicate(nbp, unit2day)
        }}

Heraut Louis's avatar
Heraut Louis committed
    if (all(class(var) != 'list')) {
        var = list(var)
        if (length(var) == 1) {
            var = replicate(nbp, var)
        }}

Heraut Louis's avatar
Heraut Louis committed
    if (all(class(glose) != 'list')) {
        glose = list(glose)
        if (length(glose) == 1) {
            glose = replicate(nbp, glose)
        }}
    
Heraut Louis's avatar
Heraut Louis committed
    if (all(class(type) != 'list')) {
        type = list(type)
        if (length(type) == 1) {
            type = replicate(nbp, type)
        }}

    if (all(class(missRect) != 'list')) {
        missRect = list(missRect)
        if (length(missRect) == 1) {
            missRect = replicate(nbp, missRect)
        }}

Heraut Louis's avatar
Heraut Louis committed
    # Creates a blank list to store all the data of each type of plot
Heraut Louis's avatar
Heraut Louis committed
    list_df2plot = vector(mode='list', length=nbp)

Heraut Louis's avatar
Heraut Louis committed
    # For all the type of graph / number of studied variables
Heraut Louis's avatar
Heraut Louis committed
    for (i in 1:nbp) {
Heraut Louis's avatar
Heraut Louis committed
        # Creates a list that gather all the info for one type of graph
Heraut Louis's avatar
Heraut Louis committed
        df2plot = list(data=df_data[[i]], 
                       trend=df_trend[[i]],
Heraut Louis's avatar
Heraut Louis committed
                       alpha=alpha[[i]],
Heraut Louis's avatar
Heraut Louis committed
                       unit2day=unit2day[[i]],
Heraut Louis's avatar
Heraut Louis committed
                       var=var[[i]], type=type[[i]],
Heraut Louis's avatar
Heraut Louis committed
                       glose=glose[[i]],
Heraut Louis's avatar
Heraut Louis committed
                       missRect=missRect[[i]])
Heraut Louis's avatar
Heraut Louis committed
        # Stores it
Heraut Louis's avatar
Heraut Louis committed
        list_df2plot[[i]] = df2plot
    }

Heraut Louis's avatar
Heraut Louis committed
    df_page = tibble(section='Sommaire', subsection=NA, n=1)
Heraut Louis's avatar
Heraut Louis committed
    
    # If map needs to be plot
    if ('map' %in% toplot) {
        df_page = map_panel(list_df2plot, 
                            df_meta,
                            idPer_trend=length(trend_period),
                            trend_period=trend_period,
Heraut Louis's avatar
Heraut Louis committed
                            mean_period=mean_period,
                            df_shapefile=df_shapefile,
                            foot_note=foot_note,
                            foot_height=foot_height,
                            resources_path=resources_path,
                            logo_dir=logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                            AEAGlogo_file=AEAGlogo_file,
                            INRAElogo_file=INRAElogo_file,
                            FRlogo_file=FRlogo_file,
                            outdirTmp=outdirTmp,
                            df_page=df_page)
Heraut Louis's avatar
Heraut Louis committed
    }
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
    # If summarize matrix needs to be plot
Heraut Louis's avatar
Heraut Louis committed
    if ('matrix' %in% toplot) {
Heraut Louis's avatar
Heraut Louis committed
        df_page = matrix_panel(list_df2plot,
                               df_meta,
                               trend_period,
                               mean_period,
                               slice=19,
                               outdirTmp=outdirTmp,
                               A3=TRUE,
                               foot_note=foot_note,
                               foot_height=foot_height,
                               resources_path=resources_path,
                               logo_dir=logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                               AEAGlogo_file=AEAGlogo_file,
                               INRAElogo_file=INRAElogo_file,
                               FRlogo_file=FRlogo_file,
                               df_page=df_page)
Heraut Louis's avatar
Heraut Louis committed
    }
Heraut Louis's avatar
Heraut Louis committed
    # If datasheets needs to be plot
    if ('datasheet' %in% toplot) {
        df_page = datasheet_panel(list_df2plot,
                                  df_meta,
                                  trend_period,
                                  info_header=info_header,
                                  time_header=time_header,
                                  foot_note=foot_note,
                                  layout_matrix=layout_matrix,
                                  info_ratio=info_ratio,
                                  time_ratio=time_ratio,
                                  var_ratio=var_ratio,
                                  foot_height=foot_height,
                                  resources_path=resources_path,
                                  logo_dir=logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                                  AEAGlogo_file=AEAGlogo_file,
                                  INRAElogo_file=INRAElogo_file,
                                  FRlogo_file=FRlogo_file,
                                  outdirTmp=outdirTmp,
                                  df_page=df_page)
Heraut Louis's avatar
Heraut Louis committed
    }
Heraut Louis's avatar
Heraut Louis committed

    summary_panel(df_page,
                  foot_note,
                  foot_height,
                  resources_path,
                  logo_dir=logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                  AEAGlogo_file,
                  INRAElogo_file,
                  FRlogo_file,
                  outdirTmp)
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
    # Combine independant pages into one PDF
Heraut Louis's avatar
Heraut Louis committed
    details = file.info(list.files(outdirTmp, full.names=TRUE))
    details = details[with(details, order(as.POSIXct(mtime))),]
    listfile_path = rownames(details)
Heraut Louis's avatar
Heraut Louis committed
    
    summary_path = listfile_path[length(listfile_path)]
    listfile_path = listfile_path[-length(listfile_path)]
    listfile_path = c(summary_path, listfile_path)
    
Heraut Louis's avatar
Heraut Louis committed
    pdf_combine(input=listfile_path,
Heraut Louis's avatar
Heraut Louis committed
                output=file.path(outdir, outfile))
} 
Heraut Louis's avatar
Heraut Louis committed


Heraut Louis's avatar
Heraut Louis committed
## 4. PDF ORGANISATION PANEL _________________________________________
### 4.1. Summary _____________________________________________________
summary_panel = function (df_page, foot_note, foot_height, resources_path, logo_dir, AEAGlogo_file, INRAElogo_file, FRlogo_file, outdirTmp) {
Heraut Louis's avatar
Heraut Louis committed
    
Heraut Louis's avatar
Heraut Louis committed
    text_title = paste(
Heraut Louis's avatar
Heraut Louis committed
        "<b>Analyse de Stationnarité Hydrologique</b>",
        sep='')
    
    text_subtitle = paste(
        "Bassin Adour-Garonnne",
Heraut Louis's avatar
Heraut Louis committed
        sep='')

    Sec_name = rle(df_page$section)$values
    nSec = length(Sec_name)
Heraut Louis's avatar
Heraut Louis committed
    
    text_sum1 = ''
    text_page1 = ''
    text_sum2 = ''
    text_page2 = ''
    
    nline = 0
Heraut Louis's avatar
Heraut Louis committed
    nline_max = 58
Heraut Louis's avatar
Heraut Louis committed
    for (idS in 1:nSec) {
        sec_name = Sec_name[idS]
        subSec_name = rle(df_page$subsection[df_page$section == sec_name])$values
        n_page = df_page$n[df_page$section == sec_name][1]
Heraut Louis's avatar
Heraut Louis committed

        line = paste("<b>", idS, ". ", sec_name, "</b>", "<br>", sep='')
        page = paste("<b>p.", n_page, "</b><br>", sep='')
Heraut Louis's avatar
Heraut Louis committed
        
Heraut Louis's avatar
Heraut Louis committed
        if (nline <= nline_max) {
            text_sum1 = paste(text_sum1, line, sep='')
            text_page1 = paste(text_page1, page, sep='')
        } else {
            text_sum2 = paste(text_sum2, line, sep='')
            text_page2 = paste(text_page2, page, sep='')
        }

        nline = nline + 1
Heraut Louis's avatar
Heraut Louis committed
        
        nSSec = length(subSec_name)
        for (idSS in 1:nSSec) {
            subsec_name = subSec_name[idSS]
            if (!is.na(subsec_name)) {
                n_page = df_page$n[df_page$section == sec_name &
                                   df_page$subsection == subsec_name][1]
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
                line = paste("<b>", idS, ".", idSS, ".</b> ",
Heraut Louis's avatar
Heraut Louis committed
                             subsec_name, "<br>", sep='')
                page = paste("p.", n_page, "<br>", sep='')
Heraut Louis's avatar
Heraut Louis committed
                
Heraut Louis's avatar
Heraut Louis committed
                if (nline <= nline_max) {
                    text_sum1 = paste(text_sum1, line, sep='')
                    text_page1 = paste(text_page1, page, sep='')
                } else {
                    text_sum2 = paste(text_sum2, line, sep='')
                    text_page2 = paste(text_page2, page, sep='')
                }

                nline = nline + 1
Heraut Louis's avatar
Heraut Louis committed
            }
        }
Heraut Louis's avatar
Heraut Louis committed
        if (nline <= nline_max) {
            text_sum1 = paste(text_sum1, "<br>", sep='')
            text_page1 = paste(text_page1, "<br>", sep='')
        } else {
            text_sum2 = paste(text_sum2, "<br>", sep='')
            text_page2 = paste(text_page2, "<br>", sep='')
        }
        nline = nline + 1
Heraut Louis's avatar
Heraut Louis committed
    }
Heraut Louis's avatar
Heraut Louis committed

    # text_sum1 = gsub(" ", "<span style='color:white'>&#95;</span>",
                     # text_sum1)
Heraut Louis's avatar
Heraut Louis committed
    text_sum1 = gsub('[.]', '&#46;', text_sum1)
    text_page1 = gsub('[.]', '&#46;', text_page1)
Heraut Louis's avatar
Heraut Louis committed
    
Heraut Louis's avatar
Heraut Louis committed
    # text_sum2 = gsub(" ", "<span style='color:white'>&#95;</span>",
                     # text_sum2)
Heraut Louis's avatar
Heraut Louis committed
    text_sum2 = gsub('[.]', '&#46;', text_sum2)
    text_page2 = gsub('[.]', '&#46;', text_page2)
Heraut Louis's avatar
Heraut Louis committed

    
    # Converts all texts to graphical object in the right position
    gtitle = richtext_grob(text_title,
                           x=0, y=1,
                           margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                           hjust=0, vjust=1,
                           gp=gpar(col="#00A3A8", fontsize=20))

Heraut Louis's avatar
Heraut Louis committed
    gsubtitle = richtext_grob(text_subtitle,
                           x=0, y=1,
                           margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                           hjust=0, vjust=1,
                           gp=gpar(col="#00A3A8", fontsize=15))

    gsum1 = richtext_grob(text_sum1,
                          x=0, y=1,
                          margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                          hjust=0, vjust=1,
                          gp=gpar(col="#00A3A8", fontsize=10))
    
    gpage1 = richtext_grob(text_page1,
                           x=0, y=1,
                           margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                           hjust=0, vjust=1,
                           gp=gpar(col="#00A3A8", fontsize=10))

    gsum2 = richtext_grob(text_sum2,
                          x=0, y=1,
                          margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                          hjust=0, vjust=1,
                          gp=gpar(col="#00A3A8", fontsize=10))
    
    gpage2 = richtext_grob(text_page2,
                           x=0, y=1,
                           margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                           hjust=0, vjust=1,
                           gp=gpar(col="#00A3A8", fontsize=10))
    
Heraut Louis's avatar
Heraut Louis committed
    
    # If there is a foot note
    if (foot_note) {
        footName = 'sommaire'
        foot = foot_panel(footName,
                          1, resources_path,
                          logo_dir,
Heraut Louis's avatar
Heraut Louis committed
                          AEAGlogo_file, INRAElogo_file,
                          FRlogo_file, foot_height)

Heraut Louis's avatar
Heraut Louis committed
        P = list(gtitle, gsubtitle, gsum1, gpage1, gsum2, gpage2, foot)
        LM = matrix(c(1, 1, 1, 1,
                      2, 2, 2, 2,
                      3, 4, 5, 6,
                      7, 7, 7, 7),
                    nrow=4, byrow=TRUE)
Heraut Louis's avatar
Heraut Louis committed
    } else {
        foot_height = 0
Heraut Louis's avatar
Heraut Louis committed
        P = list(gtitle, gsubtitle, gsum1, gpage1, gsum2, gpage2)
        LM = matrix(c(1, 1, 1, 1,
                      2, 2, 2, 2,
                      3, 4, 5, 6),
                    nrow=3, byrow=TRUE)
Heraut Louis's avatar
Heraut Louis committed
    }
Heraut Louis's avatar
Heraut Louis committed
    id_title = 1
    id_subtitle = 2
    id_page1 = 4
    id_page2 = 6
    id_foot = 7

Heraut Louis's avatar
Heraut Louis committed
    LMcol = ncol(LM)
    LMrow = nrow(LM)
    
    LM = rbind(rep(99, times=LMcol), LM, rep(99, times=LMcol))
    LMrow = nrow(LM)
    LM = cbind(rep(99, times=LMrow), LM, rep(99, times=LMrow))
    LMcol = ncol(LM)
Heraut Louis's avatar
Heraut Louis committed

    title_height = 0.75
    subtitle_height = 1.25
    margin_size = 0.5
Heraut Louis's avatar
Heraut Louis committed
    page_width = 2
Heraut Louis's avatar
Heraut Louis committed
    height = 29.7
    width = 21

Heraut Louis's avatar
Heraut Louis committed
    row_height = (height - 2*margin_size - foot_height - title_height - subtitle_height) / (LMrow - 5)
Heraut Louis's avatar
Heraut Louis committed

    Hcut = LM[, 2]
    heightLM = rep(row_height, times=LMrow)
Heraut Louis's avatar
Heraut Louis committed
    heightLM[Hcut == id_title] = title_height
    heightLM[Hcut == id_subtitle] = subtitle_height
Heraut Louis's avatar
Heraut Louis committed
    heightLM[Hcut == id_foot] = foot_height
Heraut Louis's avatar
Heraut Louis committed
    heightLM[Hcut == 99] = margin_size
Heraut Louis's avatar
Heraut Louis committed

Heraut Louis's avatar
Heraut Louis committed
    col_width = (width - 2*margin_size - 2*page_width) / (LMcol - 4)
Heraut Louis's avatar
Heraut Louis committed
    
Heraut Louis's avatar
Heraut Louis committed
    Wcut = LM[4,]
Heraut Louis's avatar
Heraut Louis committed
    widthLM = rep(col_width, times=LMcol)
Heraut Louis's avatar
Heraut Louis committed
    widthLM[Wcut ==  id_page1 | Wcut ==  id_page2] = page_width
    widthLM[Wcut == 99] = margin_size
Heraut Louis's avatar
Heraut Louis committed

    # Arranges the graphical object
    plot = grid.arrange(grobs=P, layout_matrix=LM,
                        heights=heightLM, widths=widthLM)
    
    # Saves the plot
    ggsave(plot=plot,
           path=outdirTmp,
           filename=paste('sommaire', '.pdf', sep=''),
           width=width, height=height, units='cm', dpi=100)
}

Heraut Louis's avatar
Heraut Louis committed
### 4.2. Foot note panel______________________________________________
foot_panel = function (name, n_page, resources_path, logo_dir, AEAGlogo_file, INRAElogo_file, FRlogo_file, foot_height) {
Heraut Louis's avatar
Heraut Louis committed
    
    text_page = paste(
Heraut Louis's avatar
Heraut Louis committed
        name, "  <b>p. ", n_page, "</b>",
Heraut Louis's avatar
Heraut Louis committed
        sep='')
    
    text_date = paste (
        format(Sys.Date(), "%B %Y"),
        sep='')

    # Converts all texts to graphical object in the right position
    gtext_page = richtext_grob(text_page,
                               x=1, y=0,
                               margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                               hjust=1, vjust=0.5,
                               gp=gpar(col="#00A3A8", fontsize=8))

    gtext_date = richtext_grob(text_date,
Heraut Louis's avatar
Heraut Louis committed
                               x=1, y=0.55,
Heraut Louis's avatar
Heraut Louis committed
                               margin=unit(c(t=0, r=0, b=0, l=0), "mm"),
                               hjust=1, vjust=0.5,
                               gp=gpar(col="#00A3A8", fontsize=6))
    
    AEAGlogo_path = file.path(resources_path, logo_dir, AEAGlogo_file)
    INRAElogo_path = file.path(resources_path, logo_dir, INRAElogo_file)
    FRlogo_path = file.path(resources_path, logo_dir, FRlogo_file)
Heraut Louis's avatar
Heraut Louis committed
    
    AEAGlogo_img = readPNG(AEAGlogo_path)
    AEAGlogo_grob = rasterGrob(AEAGlogo_img,
Heraut Louis's avatar
Heraut Louis committed
                               y=0.49,
                               vjust=0.5,
Heraut Louis's avatar
Heraut Louis committed
                               width=unit(0.7*foot_height, "cm"))
    
    INRAElogo_img = readPNG(INRAElogo_path)
    INRAElogo_grob = rasterGrob(INRAElogo_img,
Heraut Louis's avatar
Heraut Louis committed
                                y=0.565,
Heraut Louis's avatar
Heraut Louis committed
                                vjust=0.5,
Heraut Louis's avatar
Heraut Louis committed
                                width=unit(1.08*foot_height, "cm"))
Heraut Louis's avatar
Heraut Louis committed
    
    FRlogo_img = readPNG(FRlogo_path)
    FRlogo_grob = rasterGrob(FRlogo_img,
                             x=0, hjust=0,
                             width=unit(1*foot_height, "cm"))
    
    P = list(void,
             FRlogo_grob, INRAElogo_grob, AEAGlogo_grob,
Heraut Louis's avatar
Heraut Louis committed
             gtext_page, gtext_date)
Heraut Louis's avatar
Heraut Louis committed

    # Creates the matrix layout
    LM = matrix(c(1, 2, 3, 4, 5,
                  1, 2, 3, 4, 6),
                nrow=2, 
                byrow=TRUE)

    # And sets the relative width of each plot
    widths = rep(1, times=ncol(LM))
Heraut Louis's avatar
Heraut Louis committed
    widths[2] = 0.2
Heraut Louis's avatar
Heraut Louis committed
    widths[3] = 0.25
    widths[4] = 0.2
    
    # Arranges all the graphical objetcs
    plot = grid.arrange(grobs=P,
                        layout_matrix=LM,
                        widths=widths)
    
    # Return the plot object
    return (plot)
}