From f89d857415a76ca2d09010414ca1d5279819439c Mon Sep 17 00:00:00 2001
From: "louis.heraut" <louis.heraut@inrae.fr>
Date: Sun, 19 Dec 2021 04:43:26 +0100
Subject: [PATCH] End layout

---
 plotting/panel.R | 1053 ++++++++++++++++++++++++++++------------------
 script.R         |   12 +-
 2 files changed, 648 insertions(+), 417 deletions(-)

diff --git a/plotting/panel.R b/plotting/panel.R
index f508e29..0993455 100644
--- a/plotting/panel.R
+++ b/plotting/panel.R
@@ -686,7 +686,7 @@ time_panel = function (df_data_code, df_trend_code, type, p_threshold=0.1, missR
 }
 
 
-matrice_panel = function (list_df2plot, df_meta, trend_period, mean_period, slice=NULL, outdirTmp='', outnameTmp='matrix', A3=FALSE) {
+matrice_panel = function (list_df2plot, df_meta, trend_period, mean_period, slice=NULL, outdirTmp='', outnameTmp='matrix', title=NULL, A3=FALSE) {
 
     nbp = length(list_df2plot)
     
@@ -694,518 +694,745 @@ matrice_panel = function (list_df2plot, df_meta, trend_period, mean_period, slic
     Code = levels(factor(df_meta$code))
     nCode = length(Code)
 
-    if (!is.null(slice)) {
+    # nbp = length(list_df2plot)
 
-        # By
-        nMat = as.integer(nCode/slice) + 1
-        sublist_df2plot = list_df2plot
+    # # Get all different stations code
+    # Code = levels(factor(df_meta$code))
+    # nCode = length(Code)
 
-        for (i in 1:nMat) {
+    df_trend = list_df2plot[[1]]$trend
 
-            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
+    # Convert 'trend_period' to list
+    trend_period = as.list(trend_period)
+    # Number of trend period
+    nPeriod_trend = length(trend_period)
+    
+    nPeriod_max = 0
+    for (code in Code) {
+        
+        df_trend_code = df_trend[df_trend$code == code,]
 
-                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,
-                                mean_period=mean_period,
-                                outdirTmp=outdirTmp,
-                                outnameTmp=paste(outnameTmp,
-                                                 '_', i,
-                                                 sep=''),
-                                A3=A3)
-        }
+        Start = df_trend_code$period_start
+        UStart = levels(factor(Start))
+        
+        End = df_trend_code$period_end
+        UEnd = levels(factor(End))
         
-    } else { 
+        nPeriod = max(length(UStart), length(UEnd))
 
-        print(paste('matrix :', outnameTmp))
-        # nbp = length(list_df2plot)
+        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)
 
-        # # Get all different stations code
-        # Code = levels(factor(df_meta$code))
-        # nCode = length(Code)
+    for (j in 1:nCode) {
+        
+        code = Code[j]
 
-        df_trend = list_df2plot[[1]]$trend
+        df_trend_code = df_trend[df_trend$code == code,]
 
-        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))
 
-            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()
 
-            if (nPeriod > nPeriod_max) {
-                nPeriod_max = nPeriod
-            }
+        for (i in 1:nPeriod_trend) {
+            Periods = append(Periods, 
+                             paste(Start[i],
+                                   End[i],
+                                   sep=' / '))
         }
+
+        Start_code[[j]] = Start
+        End_code[[j]] = End
+        Code_code[[j]] = code
+        Periods_code[[j]] = Periods
         
-        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]
+    TrendMean_code = array(rep(1, nPeriod_trend*nbp*nCode),
+                           dim=c(nPeriod_trend, nbp, nCode))
 
-            df_trend_code = df_trend[df_trend$code == code,]
+    for (j in 1:nPeriod_trend) {
 
-            Start = df_trend_code$period_start
-            UStart = levels(factor(Start))
+        for (k in 1:nCode) {
             
-            End = df_trend_code$period_end
-            UEnd = levels(factor(End))
+            code = Code[k]
             
-            nPeriod = max(length(UStart), length(UEnd))
+            for (i in 1:nbp) {
+                
+                df_data = list_df2plot[[i]]$data
+                df_trend = list_df2plot[[i]]$trend
+                p_threshold = list_df2plot[[i]]$p_threshold
 
-            Periods = c()
+                df_data_code = df_data[df_data$code == code,] 
+                df_trend_code = df_trend[df_trend$code == code,]
 
-            for (i in 1:nPeriod_max) {
-                Periods = append(Periods, 
-                                 paste(substr(Start[i], 1, 4),
-                                       substr(End[i], 1, 4),
-                                       sep=' / '))
-            }
+                Start = Start_code[Code_code == code][[1]][j]
+                End = End_code[Code_code == code][[1]][j]
+                Periods = Periods_code[Code_code == code][[1]][j]
 
-            Start_code[[j]] = Start
-            End_code[[j]] = End
-            Code_code[[j]] = code
-            Periods_code[[j]] = Periods
-            
+                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
+            }
         }
+    }
 
-        TrendMean_code = array(rep(1, nPeriod_max*nbp*nCode),
-                               dim=c(nPeriod_max, nbp, nCode))
+    minTrendMean = apply(TrendMean_code, c(1, 2), min, na.rm=TRUE)
+    maxTrendMean = apply(TrendMean_code, c(1, 2), max, na.rm=TRUE)
 
-        for (j in 1:nPeriod_max) {
+    
+    Periods_trend = c()
+    NPeriod_trend = c()
+    Type_trend = list()
+    Code_trend = c()
+    Pthresold_trend = c()
+    TrendMean_trend = c()
+    DataMean_trend = c()
+    Fill_trend = c()
+    Color_trend = c()
+
+    for (j in 1:nPeriod_trend) {
 
-            for (k in 1:nCode) {
-                
-                code = Code[k]
+        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
                 
-                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,]
+                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]
+                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_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,]
+                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
+                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
+                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 = 'white'
+                    Pthresold = p_thresold
+                } else { 
+                    fill = 'white'
+                    color = 'grey85'  
+                    Pthresold = NA
                 }
+
+                Periods_trend = append(Periods_trend, Periods)
+                NPeriod_trend = append(NPeriod_trend, j)
+                Type_trend = append(Type_trend, type)
+                Code_trend = append(Code_trend, code)
+                Pthresold_trend = append(Pthresold_trend, Pthresold)
+                TrendMean_trend = append(TrendMean_trend, trendMean)
+                DataMean_trend = append(DataMean_trend, dataMean)
+                Fill_trend = append(Fill_trend, fill)
+                Color_trend = append(Color_trend, color)
             }
         }
+    }
 
-        minTrendMean = apply(TrendMean_code, c(1, 2), min, na.rm=TRUE)
-        maxTrendMean = apply(TrendMean_code, c(1, 2), max, na.rm=TRUE)
-
-        Periods_trend = c()
-        NPeriod_trend = c()
-        Type_trend = list()
-        Code_trend = c()
-        Pthresold_trend = c()
-        TrendMean_trend = c()
-        DataMean_trend = c()
-        Fill_trend = c()
-        Color_trend = c()
+    
+    # If there is a 'mean_period'
+    if (!is.null(mean_period)) {
+        
+        Periods_mean = c()
+        NPeriod_mean = c()
+        Type_mean = list()
+        Code_mean = c()
+        DataMean_mean = c()
+        BreakMean_mean = c()
+        
+        # Convert 'mean_period' to list
+        mean_period = as.list(mean_period)
+        # Number of mean period
+        nPeriod_mean = length(mean_period)
 
-        for (j in 1:nPeriod_max) {
+        BreakMean_code = array(rep(1, nPeriod_mean*nbp*nCode),
+                               dim=c(nPeriod_mean, nbp, nCode))
+        
+        dataMeantmp = array(rep(NA, nbp*nCode),
+                            dim=c(nbp, nCode))
+        
+        # For all mean period
+        for (j in 1:nPeriod_mean) {
 
-            for (code in Code) {
+            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
                     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]
-
+                    
+                    # Get the current start and end of the sub period
+                    Start_mean = mean_period[[j]][1]
+                    End_mean = mean_period[[j]][2]
+                    
+                    # Extract the data corresponding to this sub period
                     df_data_code_per =
-                        df_data_code[df_data_code$Date >= Start 
-                                     & df_data_code$Date <= End,]
+                        df_data_code[df_data_code$Date >= Start_mean 
+                                     & df_data_code$Date <= End_mean,]
+                    
+                    # Min for the sub period
+                    Datemin = min(df_data_code_per$Date)
+                    
+                    # Max for the sub period
+                    Datemax = max(df_data_code_per$Date)
 
-                    df_trend_code_per = 
-                        df_trend_code[df_trend_code$period_start == Start 
-                                      & df_trend_code$period_end == End,]
+                    Periods = paste(Datemin, Datemax,
+                                    sep=' / ')
 
-                    Ntrend = nrow(df_trend_code_per)
-                    if (Ntrend > 1) {
-                        df_trend_code_per = df_trend_code_per[1,]
+                    # Mean of the flow over the sub period
+                    dataMean = mean(df_data_code_per$Qm3s,
+                                    na.rm=TRUE)
+
+                    if (j > 1) {
+                        Break = dataMean - dataMeantmp[i, k]
+                    } else {
+                        Break = NA
                     }
                     
-                    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 = 'white'
-                        Pthresold = p_thresold
-                    } else { 
-                        fill = 'white'
-                        color = 'grey85'  
-                        Pthresold = NA
-                    }
-
-                    Periods_trend = append(Periods_trend, Periods)
-                    NPeriod_trend = append(NPeriod_trend, j)
-                    Type_trend = append(Type_trend, type)
-                    Code_trend = append(Code_trend, code)
-                    Pthresold_trend = append(Pthresold_trend, Pthresold)
-                    TrendMean_trend = append(TrendMean_trend, trendMean)
-                    DataMean_trend = append(DataMean_trend, dataMean)
-                    Fill_trend = append(Fill_trend, fill)
-                    Color_trend = append(Color_trend, color)
+                    BreakMean = Break / dataMeantmp[i, k]
+                    BreakMean_code[j, i, k] = BreakMean
+                    
+                    dataMeantmp[i, k] = dataMean
+                    
+                    
+                    Periods_mean = append(Periods_mean, Periods)
+                    NPeriod_mean = append(NPeriod_mean, j)
+                    Type_mean = append(Type_mean, type)
+                    Code_mean = append(Code_mean, code)
+                    DataMean_mean = append(DataMean_mean, dataMean)
+                    BreakMean_mean = append(BreakMean_mean,
+                                            BreakMean)
                 }
             }
         }
+        
+        minBreakMean = apply(BreakMean_code, c(1, 2),
+                             min, na.rm=TRUE)
+        maxBreakMean = apply(BreakMean_code, c(1, 2),
+                             max, na.rm=TRUE)
 
-
-        Periods_mean = c()
-        NPeriod_mean = c()
-        Type_mean = list()
-        Code_mean = c()
-        DataMean_mean = c()
-        Break_mean = c()
         Fill_mean = c()
         Color_mean = c()
 
-        # If there is a 'mean_period'
-        if (!is.null(mean_period)) {
-            # Convert 'mean_period' to list
-            mean_period = as.list(mean_period)
-            # Number of mean period
-            nPeriod_mean = length(mean_period)
-
-            dataMeantmp = array(rep(0, nbp*nCode),
-                                dim=c(nbp, nCode))
+        ii = 1
+        for (j in 1:nPeriod_mean) {
             
-            # For all mean period
-            for (j in 1:nPeriod_mean) {
-
-                for (k in 1:nCode) {
+            for (k in 1:nCode) {
+                
+                code = Code[k]
                 
-                    code = Code[k]
+                for (i in 1:nbp) {
                     
-                    for (i in 1:nbp) {
-                        
-                        df_data = list_df2plot[[i]]$data
-                        type = list_df2plot[[i]]$type
-                        
-                        df_data_code = df_data[df_data$code == code,] 
-                        
-                        # Get the current start and end of the sub period
-                        Start_mean = mean_period[[j]][1]
-                        End_mean = mean_period[[j]][2]
-                        
-                        # Extract the data corresponding to this sub period
-                        df_data_code_per =
-                            df_data_code[df_data_code$Date >= Start_mean 
-                                         & df_data_code$Date <= End_mean,]
-                        
-                        # Min for the sub period
-                        Datemin = min(df_data_code_per$Date)
-                        
-                        # Max for the sub period
-                        Datemax = max(df_data_code_per$Date)
-
-                        Periods = paste(Datemin, Datemax,
-                                        sep=' / ')
+                    BreakMean = BreakMean_mean[ii]
+                    
+                    color_res = get_color(BreakMean, 
+                                          minBreakMean[j, i],
+                                          maxBreakMean[j, i],
+                                          palette_name='perso',
+                                          reverse=TRUE)
+                    
+                    fill = color_res
+                    color = 'white'
 
-                        fill = 'white'
-                        color = 'grey85'  
-                        
-                        # Mean of the flow over the sub period
-                        dataMean = mean(df_data_code_per$Qm3s,
-                                           na.rm=TRUE)
-                        
-                        Break = dataMeantmp[i, k] - dataMean
-                        dataMeantmp[i, k] = dataMean
-                        
-                        Periods_mean = append(Periods_mean, Periods)
-                        NPeriod_mean = append(NPeriod_mean, j)
-                        Type_mean = append(Type_mean, type)
-                        Code_mean = append(Code_mean, code)
-                        DataMean_mean = append(DataMean_mean, dataMean)
-                        Break_mean = append(Break_mean, Break)
-                        Fill_mean = append(Fill_mean, fill)
-                        Color_mean = append(Color_mean, color)
-                        
-                    }
+                    Fill_mean = append(Fill_mean, fill)
+                    Color_mean = append(Color_mean, color)
+                    
+                    ii = ii + 1
                 }
             }
         }
+    }
 
-        height = length(Code)
-        width = nbp * 2 * nPeriod_max + nPeriod_max + nPeriod_mean * nbp + nPeriod_mean + nbp
-
-        print(nPeriod_mean)
-        print(width)
-        
-        
-        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")
-
-
-        ### Trend ###
-        for (j in 1:nPeriod_max) {
-
-            Type_trend_per = Type_trend[NPeriod_trend == j]
-            Code_trend_per = Code_trend[NPeriod_trend == j]
-            Pthresold_trend_per = Pthresold_trend[NPeriod_trend == j]
-            TrendMean_trend_per = TrendMean_trend[NPeriod_trend == j]
-            DataMean_trend_per = DataMean_trend[NPeriod_trend == j]
-            Fill_trend_per = Fill_trend[NPeriod_trend == j]
-            Color_trend_per = Color_trend[NPeriod_trend == j]
 
-            Xtmp = as.integer(factor(as.character(Type_trend_per)))
+    if (is.null(slice)) {
+        slice = nCode
+    }
 
-            Xc = j + (j - 1)*nbp*2        
-            Xm = Xtmp + (j - 1)*nbp*2 + j
-            X = Xtmp + (j - 1)*nbp*2 + nbp + j
+    firstLetter = levels(factor(substr(Code, 1, 1)))
+    
+    for (fL in firstLetter) {
 
-            Y = as.integer(factor(Code_trend_per))
+        print(paste('matrix for region :', fL))
 
-            x = Xc - 0.4
-            xend = X[length(X)] + 0.25
-            y = height + 1
-            yend = height + 1
+        subCodefL = Code[substr(Code, 1, 1) == fL]
+        nsubCodefL = length(subCodefL)
+        
+        nMat = as.integer(nsubCodefL/slice) + 1
+        
+        for (imat in 1:nMat) {
+            subCode = subCodefL[(slice*(imat-1)+1):(slice*imat)]
 
-            mat = mat +
-                annotate("segment",
-                         x=x, xend=xend,
-                         y=y, yend=yend, 
-                         color="grey40", size=0.35)
+            subCode = subCode[!is.na(subCode)]
             
-            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')
+            nsubCode = length(subCode)
             
-            for (i in 1:length(X)) {
-                mat = mat +
-
-    gg_circle(r=0.45, xc=X[i], yc=Y[i],
-              fill=Fill_trend_per[i], color=Color_trend_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_trend_per)) {
-                trendMean = TrendMean_trend_per[i]
-                trendC = round(trendMean*100, 2)
-
-                if (!is.na(Pthresold_trend_per[i])) {
-                    Tcolor = 'white'
-                } else {
-                    Tcolor = 'grey85'
-                }
+            subPeriods_trend = Periods_trend[substr(Code_trend, 1, 1)
+                                             == fL]
+            subNPeriod_trend = NPeriod_trend[substr(Code_trend, 1, 1)
+                                             == fL]
+            subType_trend = Type_trend[substr(Code_trend, 1, 1)
+                                       == fL]
+            subCode_trend = Code_trend[substr(Code_trend, 1, 1)
+                                       == fL]
+            subPthresold_trend = Pthresold_trend[substr(Code_trend, 1, 1)
+                                                 == fL]
+            subTrendMean_trend = TrendMean_trend[substr(Code_trend, 1, 1)
+                                                 == fL]
+            subDataMean_trend = DataMean_trend[substr(Code_trend, 1, 1)
+                                               == fL]
+            subFill_trend = Fill_trend[substr(Code_trend, 1, 1)
+                                       == fL]
+            subColor_trend = Color_trend[substr(Code_trend, 1, 1)
+                                         == fL]
+            
+            subPeriods_mean = Periods_mean[substr(Code_mean, 1, 1)
+                                           == fL]
+            subNPeriod_mean = NPeriod_mean[substr(Code_mean, 1, 1)
+                                           == fL]
+            subType_mean = Type_mean[substr(Code_mean, 1, 1)
+                                     == fL]
+            subCode_mean = Code_mean[substr(Code_mean, 1, 1)
+                                     == fL]
+            subDataMean_mean = DataMean_mean[substr(Code_mean, 1, 1)
+                                             == fL]
+            subBreakMean_mean = BreakMean_mean[substr(Code_mean, 1, 1)
+                                               == fL]
+            subFill_mean = Fill_mean[substr(Code_mean, 1, 1)
+                                     == fL]
+            subColor_mean = Color_mean[substr(Code_mean, 1, 1)
+                                       == fL]
+            
+            title = df_meta[df_meta$code == subCode[1],]$region_hydro
+            
+            
+            ### Plot ###
+            height = length(subCode)
+            width = nbp * 2 * nPeriod_trend + nPeriod_trend + nPeriod_mean * nbp + nPeriod_mean + nbp        
+            
+            options(repr.plot.width=width, repr.plot.height=height)
+            
+            mat = ggplot() + theme_ash + 
                 
-                dataMean = round(DataMean_trend_per[i], 2)
+                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(),
+                    plot.margin=margin(t=5, r=5, b=5, l=5, unit="mm")
+                )
+            
+            xt = 1 - 6
+            yt = height + 2
+            Title = bquote(bold(.(title)))
+            
+            mat = mat +
+                annotate("text", x=xt, y=yt,
+                         label=Title,
+                         hjust=0, vjust=1, 
+                         size=6, color="#00A3A8")
+
+
+            ### Trend ###
+            for (j in 1:nPeriod_trend) {
+
+                Type_trend_per =
+                    subType_trend[subNPeriod_trend == j]
+                Code_trend_per =
+                    subCode_trend[subNPeriod_trend == j]
+                Pthresold_trend_per =
+                    subPthresold_trend[NPeriod_trend == j]
+                TrendMean_trend_per =
+                    subTrendMean_trend[subNPeriod_trend == j]
+                DataMean_trend_per =
+                    subDataMean_trend[subNPeriod_trend == j]
+                Fill_trend_per =
+                    subFill_trend[subNPeriod_trend == j]
+                Color_trend_per =
+                    subColor_trend[subNPeriod_trend == j]
+
+                Xtmp = as.integer(factor(as.character(Type_trend_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_trend_per))
+
+                x = Xc - 0.4
+                xend = X[length(X)] + 0.25
+                y = height + 1
+                yend = height + 1
 
                 mat = mat +
-                    annotate('text', x=X[i], y=Y[i],
-                             label=trendC,
-                             hjust=0.5, vjust=0.5, 
-                             size=3, color=Tcolor) + 
+                    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)))
 
-    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=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_trend_per[i],
+                                  color=Color_trend_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') 
+                }
 
-            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') + 
+                for (i in 1:length(TrendMean_trend_per)) {
+                    trendMean = TrendMean_trend_per[i]
+                    trendC = signif(trendMean*100, 2)
 
-    annotate('text', x=Xc, y=max(Y) + 0.6,
-             label=bquote(bold('Fin')),
-             hjust=0.5, vjust=0.5, 
-             size=3, color='grey20')
+                    if (!is.na(Pthresold_trend_per[i])) {
+                        Tcolor = 'white'
+                    } else {
+                        Tcolor = 'grey85'
+                    }
+                    
+                    dataMean = signif(DataMean_trend_per[i], 2)
 
-            for (i in 1:nbp) {
-                type = list_df2plot[[i]]$type
+                    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=X[i], y=max(Y) + 0.7,
-                             label=bquote(.(type)),
+                    annotate('text', x=Xc, y=max(Y) + 0.85,
+                             label=bquote(bold('Début')),
                              hjust=0.5, vjust=0.5, 
-                             size=3.5, color='grey20') +
+                             size=3, color='grey20') + 
                     
-                    annotate('text', x=Xm[i], y=max(Y) + 0.7,
-                             label=bquote('µ'*.(type)),
+                    annotate('text', x=Xc, y=max(Y) + 0.6,
+                             label=bquote(bold('Fin')),
                              hjust=0.5, vjust=0.5, 
-                             size=3.5, color='grey20')  
-            }
-        }
-
-
-        ### Mean ###
-
-
+                             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 (k in 1:nsubCode) {
+                    code = subCode[k]
 
+                    label = Periods_trend[NPeriod_trend == j
+                                          & subCode_trend == code][1]
+                    periodStart = substr(label, 1, 4)
+                    periodEnd = substr(label, 14, 17)
+                    
+                    mat = mat +
+                        annotate('text', x=Xc, y=k + 0.13,
+                                 label=bquote(bold(.(periodStart))),
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3, color='grey40') + 
+                        
+                        annotate('text', x=Xc, y=k - 0.13,
+                                 label=bquote(bold(.(periodEnd))),
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3, color='grey40')
+                }
+            }
 
 
+            ### Mean ###
+            for (j in 1:nPeriod_mean) {
 
+                Type_mean_per =
+                    subType_mean[subNPeriod_mean == j]
+                Code_mean_per =
+                    subCode_mean[subNPeriod_mean == j]
+                DataMean_mean_per =
+                    subDataMean_mean[subNPeriod_mean == j]
+                BreakMean_mean_per =
+                    subBreakMean_mean[subNPeriod_mean == j]
+                Fill_mean_per =
+                    subFill_mean[subNPeriod_mean == j]
+                Color_mean_per =
+                    subColor_mean[subNPeriod_mean == j]
+
+                Xtmp_mean = as.integer(factor(as.character(Type_mean_per)))
+
+                Xc_mean = j + (j - 1)*nbp + X[length(X)]
+                Xm_mean = Xtmp_mean + (j - 1)*nbp + j + X[length(X)]
+                Xr_mean = Xtmp_mean + (j - 1)*nbp*2 + j + X[length(X)]
+                
+                Y_mean = as.integer(factor(Code_mean_per))
 
-        
-        ### Code ###
-        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='')
-            }
+                x = Xc_mean - 0.4
+                xend = Xm_mean[length(Xm_mean)] + 0.25
+                y = height + 1
+                yend = height + 1
 
-            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") +
+                mat = mat +
+                    annotate("segment",
+                             x=x, xend=xend,
+                             y=y, yend=yend, 
+                             color="grey40", size=0.35)
+                
+                yt = y + 0.15
+                Start = mean_period[[j]][1]
+                End = mean_period[[j]][2]
                 
-                annotate('text', x=0.3, y=i - 0.14,
-                         label=name,
-                         hjust=1, vjust=0.5, 
-                         size=3.5, color="#00A3A8")
+                periodName = bquote(bold('Période')~bold(.(as.character(j+nPeriod_trend))))
 
+                mat = mat +
+                    annotate("text", x=x, y=yt,
+                             label=periodName,
+                             hjust=0, vjust=0.5, 
+                             size=3, color='grey40')
+                
+                if (j > 1) {
+                    x = Xr_mean[1] - 0.4
+                    xend = Xr_mean[length(Xr_mean)] + 0.25
+
+                    mat = mat +
+                        annotate("segment",
+                                 x=x, xend=xend,
+                                 y=y, yend=yend, 
+                                 color="grey40", size=0.35)
+                    
+                    breakName =  bquote(bold('Rupture')~bold(.(as.character(j-1+nPeriod_trend)))*bold('-')*bold(.(as.character(j+nPeriod_trend))))
+                    
+                    mat = mat +
+                        annotate("text", x=x, y=yt,
+                                 label=breakName,
+                                 hjust=0, vjust=0.5, 
+                                 size=3, color='grey40')
+                }
+                
+                for (i in 1:length(Xm_mean)) {
+                    mat = mat +
+                        
+                        gg_circle(r=0.45, xc=Xm_mean[i], yc=Y[i],
+                                  fill='white', color='grey40') +
+                        
+                        gg_circle(r=0.45, xc=Xc_mean, yc=Y[i],
+                                  fill='white', color='grey40')
+                    
+                    if (j > 1) {
+                        mat = mat +
+                            gg_circle(r=0.45, xc=Xr_mean[i], yc=Y[i],
+                                      fill=Fill_mean_per[i],
+                                      color=Color_mean_per[i])
+                    }
+                }
 
-            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)
+                for (i in 1:length(DataMean_mean_per)) {
+                    dataMean = signif(DataMean_mean_per[i], 2)
+                    
+                    mat = mat +
+                        annotate('text', x=Xm_mean[i], y=Y[i],
+                                 label=dataMean,
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3, color='grey40')
+
+                    if (j > 1) {
+                        BreakMean = BreakMean_mean_per[i]
+                        BreakC = signif(BreakMean*100, 2)
+                        
+                        mat = mat +
+                            annotate('text', x=Xr_mean[i], y=Y[i],
+                                     label=BreakC,
+                                     hjust=0.5, vjust=0.5, 
+                                     size=3, color='white')   
+                    }
+                }
                 
                 mat = mat +
-                    annotate('text', x=Xc, y=i + 0.13,
-                             label=bquote(bold(.(periodStart))),
+                    annotate('text', x=Xc_mean, y=max(Y) + 0.85,
+                             label=bquote(bold('Début')),
                              hjust=0.5, vjust=0.5, 
-                             size=3, color='grey40') + 
+                             size=3, color='grey20') + 
                     
-                    annotate('text', x=Xc, y=i - 0.13,
-                             label=bquote(bold(.(periodEnd))),
+                    annotate('text', x=Xc_mean, y=max(Y) + 0.6,
+                             label=bquote(bold('Fin')),
                              hjust=0.5, vjust=0.5, 
-                             size=3, color='grey40')
+                             size=3, color='grey20')
+
+                
+                for (i in 1:nbp) {
+                    type = list_df2plot[[i]]$type
+                    mat = mat +
+                        annotate('text', x=Xm_mean[i], y=max(Y) + 0.7,
+                                 label=bquote('µ'*.(type)),
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3.5, color='grey20')
+
+                    if (j > 1) {
+                        mat = mat +
+                            annotate('text', x=Xr_mean[i], y=max(Y) + 0.7,
+                                     label=bquote('d'*.(type)),
+                                     hjust=0.5, vjust=0.5, 
+                                     size=3.5, color='grey20')
+                    }
+                }
+
+                for (k in 1:nsubCode) {
+                    code = subCode[k]
+                    label = Periods_mean[NPeriod_mean == j
+                                         & subCode_mean == code][1]
+                    periodStart = substr(label, 1, 4)
+                    periodEnd = substr(label, 14, 17)
+
+                    mat = mat +
+                        annotate('text', x=Xc_mean, y=k + 0.13,
+                                 label=bquote(bold(.(periodStart))),
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3, color='grey40') + 
+                        
+                        annotate('text', x=Xc_mean, y=k - 0.13,
+                                 label=bquote(bold(.(periodEnd))),
+                                 hjust=0.5, vjust=0.5, 
+                                 size=3, color='grey40')
+                }            
             }
-        }
 
-        ### Environment ###
+            
+            ### Code ###
+            for (k in 1:nsubCode) {
+
+                code = subCode[k]
+                name = df_meta[df_meta$code == code,]$nom
+                ncharMax = 40
+                if (nchar(name) > ncharMax) {
+                    name = paste(substr(name, 1, ncharMax), '...', sep='')
+                }
 
-        mat = mat +
+                mat = mat +
+                    annotate('text', x=0.3, y=k + 0.14,
+                             label=bquote(bold(.(code))),
+                             hjust=1, vjust=0.5, 
+                             size=3.5, color="#00A3A8") +
+                    
+                    annotate('text', x=0.3, y=k - 0.14,
+                             label=name,
+                             hjust=1, vjust=0.5, 
+                             size=3.5, color="#00A3A8")
+            }
+            
 
-        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
-        if (A3) {
-            width = 42
-            height = 29.7
-            dpi = 300
-            print('aaaa')
-        } else {
-            width = 29.7
-            height = 21
-            dpi = 100
+            ### Environment ###
+
+            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(2)),
+                                   expand=c(0, 0))
+            
+            # Saving matrix plot
+            if (A3) {
+                width = 42
+                height = 29.7
+                dpi = 300
+            } else {
+                width = 29.7
+                height = 21
+                dpi = 100
+            }
+            
+            ggsave(plot=mat, 
+                   path=outdirTmp,
+                   filename=paste(outnameTmp, '_', fL, imat, '.pdf',
+                                  sep=''),
+                   width=width, height=height, units='cm', dpi=dpi)
+            
         }
-        
-        ggsave(plot=mat, 
-               path=outdirTmp,
-               filename=paste(outnameTmp, '.pdf', sep=''),
-               width=width, height=height, units='cm', dpi=dpi)
-    }
+    }           
 }
 
 
@@ -2096,6 +2323,10 @@ get_color = function (value, min, max, ncolor=256, palette_name='perso', reverse
         palette_cold = rev(palette_cold)
     }
 
+    if (is.na(value)) {
+        return (NA)
+    }
+    
     if (value < 0) {
         idNorm = (value - min) / (0 - min)
         id = round(idNorm*(ncolor - 1) + 1, 0)
diff --git a/script.R b/script.R
index 9d4acc3..323c222 100644
--- a/script.R
+++ b/script.R
@@ -22,7 +22,7 @@ filedir =
 ### MANUAL SELECTION ###
 # Name of the file that will be analysed from the AG directory
 filename =
-    # ""
+    ""
 
     # c(
       # "S2235610_HYDRO_QJM.txt", 
@@ -32,9 +32,9 @@ filename =
       # "Q7002910_HYDRO_QJM.txt"
       # )
 
-    c("S4214010_HYDRO_QJM.txt",
-      "O0384010_HYDRO_QJM.txt",
-      "Q7002910_HYDRO_QJM.txt")
+    # c("S4214010_HYDRO_QJM.txt",
+      # "O0384010_HYDRO_QJM.txt",
+      # "Q7002910_HYDRO_QJM.txt")
 
 
 
@@ -44,8 +44,8 @@ AGlistdir =
     ""
 
 AGlistname = 
-    ""
-    # "Liste-station_RRSE.docx" 
+    # ""
+    "Liste-station_RRSE.docx" 
 
 
 ### NIVALE SELECTION ###
-- 
GitLab