From bc0d22b57689dd41750b5eb91c0c2d50b426fe97 Mon Sep 17 00:00:00 2001
From: "louis.heraut" <louis.heraut@inrae.fr>
Date: Fri, 10 Dec 2021 16:17:57 +0100
Subject: [PATCH] Map

---
 plotting/layout.R |  71 +++--
 plotting/panel.R  | 773 ++++++++++++++++++++++++++++------------------
 script.R          |  61 ++--
 3 files changed, 549 insertions(+), 356 deletions(-)

diff --git a/plotting/layout.R b/plotting/layout.R
index fa5aedb..7f10a41 100644
--- a/plotting/layout.R
+++ b/plotting/layout.R
@@ -14,7 +14,7 @@ library(RColorBrewer)
 source('plotting/panel.R', encoding='latin1')
 
 
-panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_opt='', filename_opt='', variable='', df_trend=NULL, p_threshold=0.1, unit2day=365.25, type='', trend_period=NULL, mean_period=NULL, axis_xlim=NULL, missRect=FALSE, time_header=NULL, info_header=TRUE, time_ratio=2, var_ratio=3, shpdir=NULL, fr_shpname=NULL, rv_shpname=NULL, computer_data_path=NULL) {
+panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_opt='', filename_opt='', variable='', df_trend=NULL, p_threshold=0.1, unit2day=365.25, type='', trend_period=NULL, mean_period=NULL, axis_xlim=NULL, missRect=FALSE, time_header=NULL, info_header=TRUE, time_ratio=2, var_ratio=3, fr_shpdir=NULL, fr_shpname=NULL,  bs_shpdir=NULL, bs_shpname=NULL, rv_shpdir=NULL, rv_shpname=NULL, computer_data_path=NULL) {
     
     outfile = "Panels"
     if (filename_opt != '') {
@@ -343,49 +343,56 @@ panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_op
 
     }
 
-    # By
-    slice = 12 
-    nMat = as.integer(nCode/slice) + 1
-    sublist_df2plot = list_df2plot
+    # # By
+    # slice = 12 
+    # nMat = as.integer(nCode/slice) + 1
+    # sublist_df2plot = list_df2plot
 
-    for (i in 1:nMat) {
+    # for (i in 1:nMat) {
 
-        subdf_meta = df_meta[(slice*(i-1)+1):(slice*i),]
-        subdf_meta = subdf_meta[!is.na(subdf_meta$code),]
-        subCode = subdf_meta$code
+    #     subdf_meta = df_meta[(slice*(i-1)+1):(slice*i),]
+    #     subdf_meta = subdf_meta[!is.na(subdf_meta$code),]
+    #     subCode = subdf_meta$code
         
 
-        for (j in 1:nbp) {
-            df_datatmp = list_df2plot[[j]]$data
-            df_trendtmp = list_df2plot[[j]]$trend
+    #     for (j in 1:nbp) {
+    #         df_datatmp = list_df2plot[[j]]$data
+    #         df_trendtmp = list_df2plot[[j]]$trend
 
-            subdf_data = df_datatmp[(df_datatmp$code %in% subCode),]
-            subdf_trend = df_trendtmp[(df_trendtmp$code %in% subCode),]
+    #         subdf_data = df_datatmp[(df_datatmp$code %in% subCode),]
+    #         subdf_trend = df_trendtmp[(df_trendtmp$code %in% subCode),]
             
-            sublist_df2plot[[j]]$data = subdf_data
-            sublist_df2plot[[j]]$trend = subdf_trend
-        }
+    #         sublist_df2plot[[j]]$data = subdf_data
+    #         sublist_df2plot[[j]]$trend = subdf_trend
+    #     }
 
-        mat = matrice_panel(sublist_df2plot, 
-                            subdf_meta,
-                            trend_period=trend_period)
+        # mat = matrice_panel(sublist_df2plot, 
+                            # subdf_meta,
+                            # trend_period=trend_period)
 
         # Saving matrix plot
-        ggsave(plot=mat, 
-               path=outdirTmp,
-               filename=paste('matrix_', i, '.pdf', sep=''),
-               width=29.7, height=21, units='cm', dpi=100)
+        # ggsave(plot=mat, 
+               # path=outdirTmp,
+               # filename=paste('matrix_', i, '.pdf', sep=''),
+               # width=29.7, height=21, units='cm', dpi=100)
         
-    }
-
-
-    map = map_panel(computer_data_path=computer_data_path,
-                    shpdir=shpdir,
-                    fr_shpname=fr_shpname,
-                    rv_shpname=rv_shpname)
-
+    # }
     
+    matrice_panel(list_df2plot, df_meta, trend_period,
+                  slice=12, outdirTmp=outdirTmp)
+
+    map_panel(list_df2plot, 
+              df_meta,
+              computer_data_path=computer_data_path,
+              fr_shpdir=fr_shpdir,
+              fr_shpname=fr_shpname,
+              bs_shpdir=bs_shpdir,
+              bs_shpname=bs_shpname,
+              rv_shpdir=rv_shpdir,
+              rv_shpname=rv_shpname,
+              outdirTmp=outdirTmp)
 
+    
     # PDF combine
     pdf_combine(input=file.path(outdirTmp, list.files(outdirTmp)),
                 output=file.path(outdir, outfile))
diff --git a/plotting/panel.R b/plotting/panel.R
index fab6e0c..bffa737 100644
--- a/plotting/panel.R
+++ b/plotting/panel.R
@@ -658,21 +658,459 @@ time_panel = function (df_data_code, df_trend_code, type, p_threshold=0.1, missR
 }
 
 
-matrice_panel = function (list_df2plot, df_meta, trend_period) {
-    
+matrice_panel = function (list_df2plot, df_meta, trend_period, slice=NULL, outdirTmp='', outnameTmp='matrix') {
+
     nbp = length(list_df2plot)
+    
+    # Get all different stations code
+    Code = levels(factor(df_meta$code))
+    nCode = length(Code)
+
+    if (!is.null(slice)) {
+
+        # By
+        nMat = as.integer(nCode/slice) + 1
+        sublist_df2plot = list_df2plot
+
+        for (i in 1:nMat) {
+
+            subdf_meta = df_meta[(slice*(i-1)+1):(slice*i),]
+            subdf_meta = subdf_meta[!is.na(subdf_meta$code),]
+            subCode = subdf_meta$code
+            
+
+            for (j in 1:nbp) {
+                df_datatmp = list_df2plot[[j]]$data
+                df_trendtmp = list_df2plot[[j]]$trend
+
+                subdf_data = df_datatmp[(df_datatmp$code %in% subCode),]
+                subdf_trend = df_trendtmp[(df_trendtmp$code %in% subCode),]
+                
+                sublist_df2plot[[j]]$data = subdf_data
+                sublist_df2plot[[j]]$trend = subdf_trend
+            }
+            
+            mat = matrice_panel(sublist_df2plot, 
+                                subdf_meta,
+                                trend_period=trend_period,
+                                outdirTmp=outdirTmp,
+                                outnameTmp=paste(outnameTmp,
+                                                 '_', i,
+                                                 sep=''))
+        }
+        
+    } else { 
+
+        print(paste('matrix :', outnameTmp))
+        # nbp = length(list_df2plot)
+
+        # # Get all different stations code
+        # Code = levels(factor(df_meta$code))
+        # nCode = length(Code)
+
+        df_trend = list_df2plot[[1]]$trend
+
+        nPeriod_max = 0
+        for (code in Code) {
+            
+            df_trend_code = df_trend[df_trend$code == code,]
+
+            Start = df_trend_code$period_start
+            UStart = levels(factor(Start))
+            
+            End = df_trend_code$period_end
+            UEnd = levels(factor(End))
+            
+            nPeriod = max(length(UStart), length(UEnd))
+
+            if (nPeriod > nPeriod_max) {
+                nPeriod_max = nPeriod
+            }
+        }
+        
+        Start_code = vector(mode='list', length=nCode)
+        End_code = vector(mode='list', length=nCode)
+        Code_code = vector(mode='list', length=nCode)
+        Periods_code = vector(mode='list', length=nCode)
+
+        for (j in 1:nCode) {
+            
+            code = Code[j]
+
+            df_trend_code = df_trend[df_trend$code == code,]
+
+            Start = df_trend_code$period_start
+            UStart = levels(factor(Start))
+            
+            End = df_trend_code$period_end
+            UEnd = levels(factor(End))
+            
+            nPeriod = max(length(UStart), length(UEnd))
 
+            Periods = c()
+
+            for (i in 1:nPeriod_max) {
+                Periods = append(Periods, 
+                                 paste(substr(Start[i], 1, 4),
+                                       substr(End[i], 1, 4),
+                                       sep=' / '))
+            }
+
+            Start_code[[j]] = Start
+            End_code[[j]] = End
+            Code_code[[j]] = code
+            Periods_code[[j]] = Periods
+            
+        }
+
+        TrendMean_code = array(rep(1, nPeriod_max*nbp*nCode),
+                               dim=c(nPeriod_max, nbp, nCode))
+
+        for (j in 1:nPeriod_max) {
+
+            for (k in 1:nCode) {
+                
+                code = Code[k]
+                
+                for (i in 1:nbp) {
+                    
+                    df_data = list_df2plot[[i]]$data
+                    df_trend = list_df2plot[[i]]$trend
+                    p_threshold = list_df2plot[[i]]$p_threshold
+
+                    df_data_code = df_data[df_data$code == code,] 
+                    df_trend_code = df_trend[df_trend$code == code,]
+
+                    Start = Start_code[Code_code == code][[1]][j]
+                    End = End_code[Code_code == code][[1]][j]
+                    Periods = Periods_code[Code_code == code][[1]][j]
+
+                    df_data_code_per =
+                        df_data_code[df_data_code$Date >= Start 
+                                     & df_data_code$Date <= End,]
+
+                    df_trend_code_per = 
+                        df_trend_code[df_trend_code$period_start == Start 
+                                      & df_trend_code$period_end == End,]
+
+                    Ntrend = nrow(df_trend_code_per)
+                    if (Ntrend > 1) {
+                        df_trend_code_per = df_trend_code_per[1,]
+                    }
+                    
+                    dataMean = mean(df_data_code_per$Qm3s, na.rm=TRUE)
+                    trendMean = df_trend_code_per$trend / dataMean
+
+                    TrendMean_code[j, i, k] = trendMean
+                }
+            }
+        }
+
+        minTrendMean = apply(TrendMean_code, c(1, 2), min, na.rm=TRUE)
+        maxTrendMean = apply(TrendMean_code, c(1, 2), max, na.rm=TRUE)
+
+        Periods_mat = c()
+        NPeriod_mat = c()
+        Type_mat = list()
+        Code_mat = c()
+        Pthresold_mat = c()
+        TrendMean_mat = c()
+        DataMean_mat = c()
+        Fill_mat = c()
+        Color_mat = c()
+
+        for (j in 1:nPeriod_max) {
+
+            for (code in Code) {
+                
+                for (i in 1:nbp) {
+                    df_data = list_df2plot[[i]]$data
+                    df_trend = list_df2plot[[i]]$trend
+                    p_threshold = list_df2plot[[i]]$p_threshold
+                    type = list_df2plot[[i]]$type
+                    
+                    df_data_code = df_data[df_data$code == code,] 
+                    df_trend_code = df_trend[df_trend$code == code,]
+
+                    Start = Start_code[Code_code == code][[1]][j]
+                    End = End_code[Code_code == code][[1]][j]
+                    Periods = Periods_code[Code_code == code][[1]][j]
+
+                    df_data_code_per =
+                        df_data_code[df_data_code$Date >= Start 
+                                     & df_data_code$Date <= End,]
+
+                    df_trend_code_per = 
+                        df_trend_code[df_trend_code$period_start == Start 
+                                      & df_trend_code$period_end == End,]
+
+                    Ntrend = nrow(df_trend_code_per)
+                    if (Ntrend > 1) {
+                        df_trend_code_per = df_trend_code_per[1,]
+                    }
+                    
+                    dataMean = mean(df_data_code_per$Qm3s, na.rm=TRUE)
+                    trendMean = df_trend_code_per$trend / dataMean
+
+                    if (df_trend_code_per$p <= p_threshold){
+                        color_res = get_color(trendMean, 
+                                              minTrendMean[j, i],
+                                              maxTrendMean[j, i],
+                                              palette_name='perso',
+                                              reverse=TRUE)
+
+                        fill = color_res$color
+                        color = 'white'
+                        Pthresold = p_thresold
+                    } else { 
+                        fill = 'white'
+                        color = 'grey85'  
+                        Pthresold = NA
+                    }
+
+                    Periods_mat = append(Periods_mat, Periods)
+                    NPeriod_mat = append(NPeriod_mat, j)
+                    Type_mat = append(Type_mat, type)
+                    Code_mat = append(Code_mat, code)
+                    Pthresold_mat = append(Pthresold_mat, Pthresold)
+                    TrendMean_mat = append(TrendMean_mat, trendMean)
+                    DataMean_mat = append(DataMean_mat, dataMean)
+                    Fill_mat = append(Fill_mat, fill)
+                    Color_mat = append(Color_mat, color)
+                }
+            }
+        }
+
+        height = length(Code)
+        width = nbp * 2 * nPeriod_max + nPeriod_max
+
+        options(repr.plot.width=width, repr.plot.height=height)
+        
+        mat = ggplot() + theme_ash + 
+
+    theme(
+        panel.border=element_blank(),
+        axis.text.x=element_blank(),
+        axis.text.y=element_blank(),
+        axis.ticks.y=element_blank(),
+        axis.ticks.x=element_blank(),
+        axis.title.y=element_blank(),
+        )
+        
+        # xt = -1
+        # yt = height + 1.75
+        # Title = bquote(bold(Territoire))
+        
+        # mat = mat +
+        #     annotate("text", x=xt, y=yt,
+        #              label=Title,
+        #              hjust=0, vjust=0.5, 
+        #              size=6, color="#00A3A8")
+        
+        for (j in 1:nPeriod_max) {
+
+            Type_mat_per = Type_mat[NPeriod_mat == j]
+            Code_mat_per = Code_mat[NPeriod_mat == j]
+            Pthresold_mat_per = Pthresold_mat[NPeriod_mat == j]
+            TrendMean_mat_per = TrendMean_mat[NPeriod_mat == j]
+            DataMean_mat_per = DataMean_mat[NPeriod_mat == j]
+            Fill_mat_per = Fill_mat[NPeriod_mat == j]
+            Color_mat_per = Color_mat[NPeriod_mat == j]
+
+            Xtmp = as.integer(factor(as.character(Type_mat_per)))
+
+            Xc = j + (j - 1)*nbp*2        
+            Xm = Xtmp + (j - 1)*nbp*2 + j
+            X = Xtmp + (j - 1)*nbp*2 + nbp + j
+
+            Y = as.integer(factor(Code_mat_per))
+
+            x = Xc - 0.4
+            xend = X[length(X)] + 0.25
+            y = height + 1
+            yend = height + 1
+
+            mat = mat +
+                annotate("segment",
+                         x=x, xend=xend,
+                         y=y, yend=yend, 
+                         color="grey40", size=0.35)
+            
+            yt = y + 0.15
+            Start = trend_period[[j]][1]
+            End = trend_period[[j]][2]
+            periodName = bquote(bold('Période')~bold(.(as.character(j))))
+            # bquote(bold(.(Start))~'/'~bold(.(End)))
+
+            mat = mat +
+                annotate("text", x=x, y=yt,
+                         label=periodName,
+                         hjust=0, vjust=0.5, 
+                         size=3, color='grey40')
+            
+            for (i in 1:length(X)) {
+                mat = mat +
+
+    gg_circle(r=0.45, xc=X[i], yc=Y[i],
+              fill=Fill_mat_per[i], color=Color_mat_per[i]) +
+
+    gg_circle(r=0.45, xc=Xm[i], yc=Y[i],
+              fill='white', color='grey40') +
+
+    gg_circle(r=0.45, xc=Xc, yc=Y[i],
+              fill='white', color='grey40') 
+            }
+
+            for (i in 1:length(TrendMean_mat_per)) {
+                trendMean = TrendMean_mat_per[i]
+                trendC = round(trendMean*100, 2)
+
+                if (!is.na(Pthresold_mat_per[i])) {
+                    Tcolor = 'white'
+                } else {
+                    Tcolor = 'grey85'
+                }
+                
+                dataMean = round(DataMean_mat_per[i], 2)
+
+                mat = mat +
+                    annotate('text', x=X[i], y=Y[i],
+                             label=trendC,
+                             hjust=0.5, vjust=0.5, 
+                             size=3, color=Tcolor) + 
+
+    annotate('text', x=Xm[i], y=Y[i],
+             label=dataMean,
+             hjust=0.5, vjust=0.5, 
+             size=3, color='grey40')
+            }
+
+            mat = mat +
+                annotate('text', x=Xc, y=max(Y) + 0.85,
+                         label=bquote(bold('Début')),
+                         hjust=0.5, vjust=0.5, 
+                         size=3, color='grey20') + 
+
+    annotate('text', x=Xc, y=max(Y) + 0.6,
+             label=bquote(bold('Fin')),
+             hjust=0.5, vjust=0.5, 
+             size=3, color='grey20')
+
+            for (i in 1:nbp) {
+                type = list_df2plot[[i]]$type
+                mat = mat +
+                    annotate('text', x=X[i], y=max(Y) + 0.7,
+                             label=bquote(.(type)),
+                             hjust=0.5, vjust=0.5, 
+                             size=3.5, color='grey20') +
+                    
+                    annotate('text', x=Xm[i], y=max(Y) + 0.7,
+                             label=bquote('µ'*.(type)),
+                             hjust=0.5, vjust=0.5, 
+                             size=3.5, color='grey20')  
+            }
+        }
+        
+        for (i in 1:length(Code)) {
+
+            code = Code[i]
+            name = df_meta[df_meta$code == code,]$nom
+            ncharMax = 30
+            if (nchar(name) > ncharMax) {
+                name = paste(substr(name, 1, ncharMax), '...', sep='')
+            }
+
+            mat = mat +
+                annotate('text', x=0.3, y=i + 0.14,
+                         label=bquote(bold(.(code))),
+                         hjust=1, vjust=0.5, 
+                         size=3.5, color="#00A3A8") +
+                
+                annotate('text', x=0.3, y=i - 0.14,
+                         label=name,
+                         hjust=1, vjust=0.5, 
+                         size=3.5, color="#00A3A8")
+
+
+            for (j in 1:nPeriod_max) {
+                Xc = j + (j - 1)*nbp*2   
+                label = Periods_code[Code_code == code][[1]][j]
+                periodStart = substr(label, 1, 4)
+                periodEnd = substr(label, 8, 11)
+                
+                mat = mat +
+                    annotate('text', x=Xc, y=i + 0.13,
+                             label=bquote(bold(.(periodStart))),
+                             hjust=0.5, vjust=0.5, 
+                             size=3, color='grey40') + 
+                    
+                    annotate('text', x=Xc, y=i - 0.13,
+                             label=bquote(bold(.(periodEnd))),
+                             hjust=0.5, vjust=0.5, 
+                             size=3, color='grey40')
+            }
+        }
+
+        mat = mat +
+
+        coord_fixed() +
+    
+        scale_x_continuous(limits=c(1 - rel(6), 
+                                    width + rel(0.5)),
+                           expand=c(0, 0)) + 
+    
+        scale_y_continuous(limits=c(1 - rel(0.5), 
+                                    height + rel(1.5)),
+                           expand=c(0, 0))
+        
+        # Saving matrix plot
+        ggsave(plot=mat, 
+               path=outdirTmp,
+               filename=paste(outnameTmp, '.pdf', sep=''),
+               width=29.7, height=21, units='cm', dpi=100)
+    }
+}
+
+
+
+map_panel = function (list_df2plot, df_meta, computer_data_path, fr_shpdir, fr_shpname, bs_shpdir=bs_shpdir, bs_shpname=bs_shpname, rv_shpdir, rv_shpname, outdirTmp) {
+    
+    fr_shppath = file.path(computer_data_path, fr_shpdir, fr_shpname)
+    rv_shppath = file.path(computer_data_path, rv_shpdir, rv_shpname)
+    bs_shppath = file.path(computer_data_path, bs_shpdir, bs_shpname)
+
+    # France
+    fr_spdf = readOGR(dsn=fr_shppath, verbose=FALSE)    
+    proj4string(fr_spdf) = CRS("+proj=longlat +ellps=WGS84")
+    # Trasnformation en Lambert93
+    france = spTransform(fr_spdf, CRS("+init=epsg:2154"))
+    df_france = tibble(fortify(france))
+
+    # Bassin hydrographique
+    bassin = readOGR(dsn=bs_shppath, verbose=FALSE)
+    df_bassin = tibble(fortify(bassin))
+    
+    # Réseau hydrographique
+    # river = readOGR(dsn=rv_shppath, verbose=FALSE) ### trop long ###
+    # river = river[which(river$Classe == 1),]
+    # df_river = tibble(fortify(river))
+
+    nbp = length(list_df2plot)
+    
     # Get all different stations code
     Code = levels(factor(df_meta$code))
     nCode = length(Code)
 
-    df_trend = list_df2plot[[1]]$trend
 
+
+    
+    df_trend = list_df2plot[[1]]$trend
+    
     nPeriod_max = 0
     for (code in Code) {
         
         df_trend_code = df_trend[df_trend$code == code,]
-
+        
         Start = df_trend_code$period_start
         UStart = levels(factor(Start))
         
@@ -680,7 +1118,7 @@ matrice_panel = function (list_df2plot, df_meta, trend_period) {
         UEnd = levels(factor(End))
         
         nPeriod = max(length(UStart), length(UEnd))
-
+        
         if (nPeriod > nPeriod_max) {
             nPeriod_max = nPeriod
         }
@@ -722,7 +1160,7 @@ matrice_panel = function (list_df2plot, df_meta, trend_period) {
     }
 
     TrendMean_code = array(rep(1, nPeriod_max*nbp*nCode),
-                              dim=c(nPeriod_max, nbp, nCode))
+                           dim=c(nPeriod_max, nbp, nCode))
 
     for (j in 1:nPeriod_max) {
 
@@ -765,309 +1203,46 @@ matrice_panel = function (list_df2plot, df_meta, trend_period) {
     }
 
     minTrendMean = apply(TrendMean_code, c(1, 2), min, na.rm=TRUE)
-    maxTrendMean = apply(TrendMean_code, c(1, 2), max, na.rm=TRUE)
-
-    Periods_mat = c()
-    NPeriod_mat = c()
-    Type_mat = list()
-    Code_mat = c()
-    Pthresold_mat = c()
-    TrendMean_mat = c()
-    DataMean_mat = c()
-    Fill_mat = c()
-    Color_mat = c()
-
-    for (j in 1:nPeriod_max) {
+    maxTrendMean = apply(TrendMean_code, c(1, 2), max, na.rm=TRUE)    
 
-        for (code in Code) {
-            
-            for (i in 1:nbp) {
-                df_data = list_df2plot[[i]]$data
-                df_trend = list_df2plot[[i]]$trend
-                p_threshold = list_df2plot[[i]]$p_threshold
-                type = list_df2plot[[i]]$type
-                
-                df_data_code = df_data[df_data$code == code,] 
-                df_trend_code = df_trend[df_trend$code == code,]
-
-                Start = Start_code[Code_code == code][[1]][j]
-                End = End_code[Code_code == code][[1]][j]
-                Periods = Periods_code[Code_code == code][[1]][j]
-
-                df_data_code_per =
-                    df_data_code[df_data_code$Date >= Start 
-                                 & df_data_code$Date <= End,]
-
-                df_trend_code_per = 
-                    df_trend_code[df_trend_code$period_start == Start 
-                                  & df_trend_code$period_end == End,]
-
-                Ntrend = nrow(df_trend_code_per)
-                if (Ntrend > 1) {
-                    df_trend_code_per = df_trend_code_per[1,]
-                }
-                
-                dataMean = mean(df_data_code_per$Qm3s, na.rm=TRUE)
-                trendMean = df_trend_code_per$trend / dataMean
-
-                if (df_trend_code_per$p <= p_threshold){
-                    color_res = get_color(trendMean, 
-                                          minTrendMean[j, i],
-                                          maxTrendMean[j, i],
-                                          palette_name='perso',
-                                          reverse=TRUE)
-
-                    fill = color_res$color
-                    color = 'white'
-                    Pthresold = p_thresold
-                } else { 
-                    fill = 'white'
-                    color = 'grey85'  
-                    Pthresold = NA
-                }
-
-                Periods_mat = append(Periods_mat, Periods)
-                NPeriod_mat = append(NPeriod_mat, j)
-                Type_mat = append(Type_mat, type)
-                Code_mat = append(Code_mat, code)
-                Pthresold_mat = append(Pthresold_mat, Pthresold)
-                TrendMean_mat = append(TrendMean_mat, trendMean)
-                DataMean_mat = append(DataMean_mat, dataMean)
-                Fill_mat = append(Fill_mat, fill)
-                Color_mat = append(Color_mat, color)
-            }
-        }
-    }
-
-    height = length(Code)
-    width = nbp * 2 * nPeriod_max + nPeriod_max
-
-    options(repr.plot.width=width, repr.plot.height=height)
-    
-    mat = ggplot() + theme_ash + 
-
-    theme(
-        panel.border=element_blank(),
-        axis.text.x=element_blank(),
-        axis.text.y=element_blank(),
-        axis.ticks.y=element_blank(),
-        axis.ticks.x=element_blank(),
-        axis.title.y=element_blank(),
-        )
-        
-    # xt = -1
-    # yt = height + 1.75
-    # Title = bquote(bold(Territoire))
     
-    # mat = mat +
-    #     annotate("text", x=xt, y=yt,
-    #              label=Title,
-    #              hjust=0, vjust=0.5, 
-    #              size=6, color="#00A3A8")
-    
-    for (j in 1:nPeriod_max) {
-
-        Type_mat_per = Type_mat[NPeriod_mat == j]
-        Code_mat_per = Code_mat[NPeriod_mat == j]
-        Pthresold_mat_per = Pthresold_mat[NPeriod_mat == j]
-        TrendMean_mat_per = TrendMean_mat[NPeriod_mat == j]
-        DataMean_mat_per = DataMean_mat[NPeriod_mat == j]
-        Fill_mat_per = Fill_mat[NPeriod_mat == j]
-        Color_mat_per = Color_mat[NPeriod_mat == j]
-
-        Xtmp = as.integer(factor(as.character(Type_mat_per)))
-
-        Xc = j + (j - 1)*nbp*2        
-        Xm = Xtmp + (j - 1)*nbp*2 + j
-        X = Xtmp + (j - 1)*nbp*2 + nbp + j
-
-        Y = as.integer(factor(Code_mat_per))
-
-        x = Xc - 0.4
-        xend = X[length(X)] + 0.25
-        y = height + 1
-        yend = height + 1
-
-        mat = mat +
-            annotate("segment",
-                     x=x, xend=xend,
-                     y=y, yend=yend, 
-                     color="grey40", size=0.35)
+    for (j in 1:nbp) {
         
-        yt = y + 0.15
-        Start = trend_period[[j]][1]
-        End = trend_period[[j]][2]
-        periodName = bquote(bold('Période')~bold(.(as.character(j))))
-            # bquote(bold(.(Start))~'/'~bold(.(End)))
-
-        mat = mat +
-            annotate("text", x=x, y=yt,
-                     label=periodName,
-                     hjust=0, vjust=0.5, 
-                     size=3, color='grey40')
+        map = ggplot() + theme_void() +
             
-        for (i in 1:length(X)) {
-            mat = mat +
-
-                gg_circle(r=0.45, xc=X[i], yc=Y[i],
-                          fill=Fill_mat_per[i], color=Color_mat_per[i]) +
-
-                gg_circle(r=0.45, xc=Xm[i], yc=Y[i],
-                          fill='white', color='grey40') +
-
-                gg_circle(r=0.45, xc=Xc, yc=Y[i],
-                          fill='white', color='grey40') 
-        }
-
-        for (i in 1:length(TrendMean_mat_per)) {
-            trendMean = TrendMean_mat_per[i]
-            trendC = round(trendMean*100, 2)
-
-            if (!is.na(Pthresold_mat_per[i])) {
-                Tcolor = 'white'
-            } else {
-                Tcolor = 'grey85'
-            }
+            coord_fixed() +
             
-            dataMean = round(DataMean_mat_per[i], 2)
-
-            mat = mat +
-                annotate('text', x=X[i], y=Y[i],
-                         label=trendC,
-                         hjust=0.5, vjust=0.5, 
-                         size=3, color=Tcolor) + 
-
-                annotate('text', x=Xm[i], y=Y[i],
-                         label=dataMean,
-                         hjust=0.5, vjust=0.5, 
-                         size=3, color='grey40')
-        }
-
-        mat = mat +
-            annotate('text', x=Xc, y=max(Y) + 0.85,
-                     label=bquote(bold('Début')),
-                     hjust=0.5, vjust=0.5, 
-                     size=3, color='grey20') + 
-
-            annotate('text', x=Xc, y=max(Y) + 0.6,
-                     label=bquote(bold('Fin')),
-                     hjust=0.5, vjust=0.5, 
-                     size=3, color='grey20')
-
-        for (i in 1:nbp) {
-            type = list_df2plot[[i]]$type
-            mat = mat +
-                annotate('text', x=X[i], y=max(Y) + 0.7,
-                         label=bquote(.(type)),
-                         hjust=0.5, vjust=0.5, 
-                         size=3.5, color='grey20') +
-                
-                annotate('text', x=Xm[i], y=max(Y) + 0.7,
-                         label=bquote('µ'*.(type)),
-                         hjust=0.5, vjust=0.5, 
-                         size=3.5, color='grey20')  
-        }
-    }
-    
-    for (i in 1:length(Code)) {
-
-        code = Code[i]
-        name = df_meta[df_meta$code == code,]$nom
-        ncharMax = 30
-        if (nchar(name) > ncharMax) {
-            name = paste(substr(name, 1, ncharMax), '...', sep='')
-        }
-
-        mat = mat +
-            annotate('text', x=0.3, y=i + 0.14,
-                     label=bquote(bold(.(code))),
-                     hjust=1, vjust=0.5, 
-                     size=3.5, color="#00A3A8") +
+            geom_polygon(data=df_france,
+                         aes(x=long, y=lat, group=group),
+                         color=NA, fill="grey97") +
             
-            annotate('text', x=0.3, y=i - 0.14,
-                     label=name,
-                     hjust=1, vjust=0.5, 
-                     size=3.5, color="#00A3A8")
-
-
-        for (j in 1:nPeriod_max) {
-            Xc = j + (j - 1)*nbp*2   
-            label = Periods_code[Code_code == code][[1]][j]
-            periodStart = substr(label, 1, 4)
-            periodEnd = substr(label, 8, 11)
-                
-            mat = mat +
-                annotate('text', x=Xc, y=i + 0.13,
-                         label=bquote(bold(.(periodStart))),
-                         hjust=0.5, vjust=0.5, 
-                         size=3, color='grey40') + 
-                
-                annotate('text', x=Xc, y=i - 0.13,
-                         label=bquote(bold(.(periodEnd))),
-                         hjust=0.5, vjust=0.5, 
-                         size=3, color='grey40')
-        }
-
-    }
-
-    mat = mat +
-
-    coord_fixed() +
-    
-    scale_x_continuous(limits=c(1 - rel(6), 
-                                width + rel(0.5)),
-                       expand=c(0, 0)) + 
+            # geom_path(data=df_river,
+            # aes(x=long, y=lat, group=group),
+            # color="grey85", size=0.15) +
+            
+            geom_polygon(data=df_bassin,
+                         aes(x=long, y=lat, group=group),
+                         color="grey70", fill=NA, size=0.1) +
+            
+            geom_polygon(data=df_france,
+                         aes(x=long, y=lat, group=group),
+                         color="grey40", fill=NA, size=0.2)
+        
+        # marker color="grey50"
+                   
+        # for (code in Code) {
+            
+        # }
         
-    scale_y_continuous(limits=c(1 - rel(0.5), 
-                                height + rel(1.5)),
-                       expand=c(0, 0))
-    
-    return (mat)
-}
-
-
 
-map_panel = function (computer_data_path, shpdir, fr_shpname, rv_shpname) {
-    
-    fr_shppath = file.path(computer_data_path, shpdir, fr_shpname)
-    rv_shppath = file.path(computer_data_path, shpdir, rv_shpname)
-    
-    # France
-    fr_spdf = readOGR(dsn=fr_shppath, verbose=FALSE)    
-    proj4string(fr_spdf) = CRS("+proj=longlat +ellps=WGS84")
-    # Trasnformation en Lambert93
-    france = spTransform(fr_spdf, CRS("+init=epsg:2154"))
-    df_france = tibble(fortify(france))
         
-    # Réseau hydrographique
-    print('aaa')
-    river = readOGR(dsn=rv_shppath, verbose=FALSE)
-    print('bbb')
-    river = river[which(river$Classe == 1),]
-    print('ccc')
-    df_river = tibble(fortify(river))
-
-    print(df_river)
-    
-    # map = ggplot() + theme_void() +
         
-    #     geom_polygon(data=df_france,
-    #                  aes(x=long, y=lat, group=group),
-    #                  color="grey40", fill="grey97", size=0.15) +
-
-    #     geom_line(data=df_river,
-    #               aes(x=long, y=lat, group=group),
-    #               color="grey70", size=0.25)
-
-    
-    # marker color="grey50"
-
-    # Saving matrix plot
-    ggsave(plot=map,
-           filename='map.pdf',
-           width=10, height=10, units='cm', dpi=100)
-    
-    return (map)
+        # Saving matrix plot
+        ggsave(plot=map,
+               path=outdirTmp,
+               filename='map.pdf',
+               width=29.7, height=21, units='cm', dpi=100)
+    }
 }
 
 
diff --git a/script.R b/script.R
index a6c89c2..3229703 100644
--- a/script.R
+++ b/script.R
@@ -74,8 +74,13 @@ p_thresold = 0.1 #c(0.01, 0.05, 0.1)
 
 
 ### MAP ###
-shpdir = 'map'
+fr_shpdir = 'map/france'
 fr_shpname = 'gadm36_FRA_0.shp'
+
+bs_shpdir = 'map/bassin'
+bs_shpname = 'BassinHydrographique.shp'
+
+rv_shpdir = 'map/river'
 rv_shpname = 'CoursEau_FXX.shp'
 
 
@@ -229,30 +234,36 @@ res_VCN10trend = get_VCN10trend(df_data, df_meta,
 #               figdir=figdir,
 #               filename_opt='time')
 
-# panels_layout(list(res_QAtrend$data, res_QMNAtrend$data,
-#                    res_VCN10trend$data), 
-#               layout_matrix=c(1, 2, 3),
-#               df_meta=df_meta, 
-#               df_trend=list(res_QAtrend$trend, res_QMNAtrend$trend,
-#                     res_VCN10trend$trend), 
-#               type=list(bquote(Q[A]), bquote(Q[MNA]), bquote(V[CN10])),
-#               missRect=list(TRUE, TRUE, TRUE),
-#               trend_period=trend_period,
-#               mean_period=mean_period,
-#               info_header=TRUE,
-#               time_header=df_data,
-#               time_ratio=2, 
-#               var_ratio=3,
-#               computer_data_path=computer_data_path,
-#               shpdir=shpdir,
-#               fr_shpname=fr_shpname,
-#               rv_shpname=rv_shpname,
-#               figdir=figdir,
-#               filename_opt='')
-
-
-
-map_panel(computer_data_path, shpdir, fr_shpname, rv_shpname)
+panels_layout(list(res_QAtrend$data, res_QMNAtrend$data,
+                   res_VCN10trend$data), 
+              layout_matrix=c(1, 2, 3),
+              df_meta=df_meta, 
+              df_trend=list(res_QAtrend$trend, res_QMNAtrend$trend,
+                    res_VCN10trend$trend), 
+              type=list(bquote(Q[A]), bquote(Q[MNA]), bquote(V[CN10])),
+              missRect=list(TRUE, TRUE, TRUE),
+              trend_period=trend_period,
+              mean_period=mean_period,
+              info_header=TRUE,
+              time_header=df_data,
+              time_ratio=2, 
+              var_ratio=3,
+              computer_data_path=computer_data_path,
+              fr_shpdir=fr_shpdir,
+              fr_shpname=fr_shpname,
+              bs_shpdir=bs_shpdir,
+              bs_shpname=bs_shpname,
+              rv_shpdir=rv_shpdir,
+              rv_shpname=rv_shpname,
+              figdir=figdir,
+              filename_opt='')
+
+
+
+# map_panel(computer_data_path,
+          # fr_shpdir, fr_shpname,
+          # bs_shpdir, bs_shpname,
+          # rv_shpdir, rv_shpname)
 
 
 ### /!\ Removed 185 row(s) containing missing values (geom_path) -> remove NA ###
-- 
GitLab