From 97807bf72c497d7091ebc0a19d119df0ff032ddc Mon Sep 17 00:00:00 2001
From: "louis.heraut" <louis.heraut@inrae.fr>
Date: Wed, 1 Dec 2021 20:00:52 +0100
Subject: [PATCH] Aes matrix

---
 plotting/layout.R |   4 +-
 plotting/panel.R  | 248 +++++++++++++++++++++++++++++-----------------
 script.R          |  18 ++--
 3 files changed, 170 insertions(+), 100 deletions(-)

diff --git a/plotting/layout.R b/plotting/layout.R
index ea1f60e..d8f671e 100644
--- a/plotting/layout.R
+++ b/plotting/layout.R
@@ -204,7 +204,9 @@ panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_op
 
     }
 
-    mat = matrice_panel(list_df2plot, df_meta)
+    ### by 16
+
+    mat = matrice_panel(list_df2plot, df_meta, period)
 
     # Saving matrix plot
     ggsave(plot=mat, 
diff --git a/plotting/panel.R b/plotting/panel.R
index bda9bdb..33e063e 100644
--- a/plotting/panel.R
+++ b/plotting/panel.R
@@ -343,24 +343,10 @@ text_panel = function(code, df_meta) {
 
 
 
-matrice_panel = function (list_df2plot, df_meta) {
+matrice_panel = function (list_df2plot, df_meta, period) {
     
     nbp = length(list_df2plot)
 
-    minTrend = c()
-    maxTrend = c()
-
-    for (i in 1:nbp) {
-        
-        df_trend = list_df2plot[[i]]$trend
-        p_threshold = list_df2plot[[i]]$p_threshold
-        
-        okTrend = df_trend$trend[df_trend$p <= p_threshold]
-
-        minTrend[i] = min(okTrend, na.rm=TRUE)
-        maxTrend[i] = max(okTrend, na.rm=TRUE)
-    }
-
     # Get all different stations code
     Code = levels(factor(df_meta$code))
     nCode = length(Code)
@@ -387,7 +373,7 @@ matrice_panel = function (list_df2plot, df_meta) {
         
         nPeriod = max(length(UStart), length(UEnd))
 
-        Periods = c()#vector(mode='list', length=nPeriod)
+        Periods = c()
 
             for (i in 1:nPeriod) {
                 Periods = append(Periods, 
@@ -404,14 +390,60 @@ matrice_panel = function (list_df2plot, df_meta) {
         }
     }
 
-    # print(Code_code)
-    # print(Periods_code)
+
+    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()
-    Trend_mat = c()
+    Pthresold_mat = c()
+    TrendMean_mat = c()
+    DataMean_mat = c()
     Fill_mat = c()
     Color_mat = c()
 
@@ -420,50 +452,56 @@ matrice_panel = function (list_df2plot, df_meta) {
         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
                 
-                # print(code)
-
+                df_data_code = df_data[df_data$code == code,] 
                 df_trend_code = df_trend[df_trend$code == code,]
 
-                # print(df_trend_code)
-                # print(Code_code == code )
-                # print(Start_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]
 
-                # print(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
+
                 if (df_trend_code_per$p <= p_threshold){
-                    color_res = get_color(df_trend_code_per$trend, 
-                                          minTrend[i],
-                                          maxTrend[i],
+                    color_res = get_color(trendMean, 
+                                          minTrendMean[j, i],
+                                          minTrendMean[j, i],
                                           palette_name='perso',
                                           reverse=FALSE)
                     fill = color_res$color
                     color = 'white'
+                    Pthresold = p_thresold
                 } else { 
                     fill = 'white'
                     color = 'grey85'  
+                    Pthresold = NA
                 }
 
-                # print(fill)
-
-                trend = df_trend_code_per$trend
-
                 Periods_mat = append(Periods_mat, Periods)
                 NPeriod_mat = append(NPeriod_mat, j)
                 Type_mat = append(Type_mat, type)
                 Code_mat = append(Code_mat, code)
-                Trend_mat = append(Trend_mat, trend)
+                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)
             }
@@ -473,9 +511,6 @@ matrice_panel = function (list_df2plot, df_meta) {
     height = length(Code)
     width = nbp * 2 * nPeriod_max
 
-    # print(height)
-    # print(width)
-
     options(repr.plot.width=width, repr.plot.height=height)
     
     mat = ggplot() +
@@ -488,11 +523,11 @@ matrice_panel = function (list_df2plot, df_meta) {
             panel.grid.major.y=element_blank(),
             panel.grid.major.x=element_blank(),
             
-            # axis.text.x=element_blank(),
-            # axis.text.y=element_blank(),
+            axis.text.x=element_blank(),
+            axis.text.y=element_blank(),
             
-            # axis.ticks.y=element_blank(),
-            # axis.ticks.x=element_blank(),
+            axis.ticks.y=element_blank(),
+            axis.ticks.x=element_blank(),
             
             ggh4x.axis.ticks.length.minor=rel(0.5),
             axis.ticks.length=unit(1.5, 'mm'),
@@ -509,93 +544,120 @@ matrice_panel = function (list_df2plot, df_meta) {
             plot.margin=margin(5, 5, 5, 5, unit="mm"),
             )
 
-    X = c(0)
+    # 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) {
-        print(j)
 
         Type_mat_per = Type_mat[NPeriod_mat == j]
         Code_mat_per = Code_mat[NPeriod_mat == j]
-        Trend_mat_per = Trend_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)))
-        X = Xtmp + X[length(X)]
 
-        # print(X)
+        Xm = Xtmp + (j - 1)*nbp*2
+        X = Xtmp + (j - 1)*nbp*2 + nbp
 
         Y = as.integer(factor(Code_mat_per))
 
-        # print(Y)
+        x = Xm[1] - 0.25
+        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)
 
+        xt = X[1] - 0.5
+        yt = y + 0.15
+        Start = period[[j]][1]
+        End = period[[j]][2]
+        periodName = bquote(bold(.(Start))~'/'~bold(.(End)))
+
+        mat = mat +
+            annotate("text", x=xt, y=yt,
+                     label=periodName,
+                     hjust=0.5, 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])
-        }
+                          fill=Fill_mat_per[i], color=Color_mat_per[i]) +
 
-        for (i in 1:nbp) {
-            type = list_df2plot[[i]]$type
-            mat = mat +
-                annotate('text', x=i, y=max(Y) + 0.6,
-                         label=bquote(.(type)),
-                         hjust=0.5, vjust=0, 
-                         size=3.5, color='grey40')       
+                gg_circle(r=0.45, xc=Xm[i], yc=Y[i],
+                          fill='white', color='grey40')
         }
-        
-        for (i in 1:length(Trend_mat_per)) {
-            trend = Trend_mat_per[i]
-            if (!is.na(trend)) {
-                power = get_power(trend)
-                dbrk = 10^power
-                trendN = round(trend / dbrk, 2)
-                trendC1 = as.character(trendN)
-                trendC2 = bquote('x '*10^{.(as.character(power))})
+
+        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 {
-                trendC1 = ''
-                trendC2 = ''
+                Tcolor = 'grey85'
             }
+            
+            dataMean = round(DataMean_mat_per[i], 2)
 
             mat = mat +
                 annotate('text', x=X[i], y=Y[i],
-                         label=trendC1,
+                         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')
+        }
+
+        for (i in 1:nbp) {
+            type = list_df2plot[[i]]$type
+            mat = mat +
+                annotate('text', x=X[i], y=max(Y) + 0.6,
+                         label=bquote(.(type)),
                          hjust=0.5, vjust=0, 
-                         size=3, color='white') +
-                annotate('text', x=X[i], y=Y[i],
-                         label=trendC2,
-                         hjust=0.5, vjust=1.3,
-                         size=2, color='white')
-            
+                         size=3.5, color='grey20') +
+                
+                annotate('text', x=Xm[i], y=max(Y) + 0.6,
+                         label=bquote(.(type)*'b'),
+                         hjust=0.5, vjust=0, 
+                         size=3.5, color='grey20')  
         }
     }
     
     for (i in 1:length(Code)) {
 
         code = Code[i]
-        name = df_meta[df_meta$code == code,]$name
-        print(name)
+        name = df_meta[df_meta$code == code,]$nom
 
         mat = mat +
             annotate('text', x=-1, y=i,
-                     label=code,
-                     hjust=0, vjust=0, 
-                     size=3.5, color='grey40') + 
+                     label=bquote(bold(.(code))),
+                     hjust=0, vjust=-0.1, 
+                     size=3.5, color="#00A3A8") + 
 
             annotate('text', x=-1, y=i,
-                     label=name,
-                     hjust=0, vjust=1, 
-                     size=3.5, color='grey40')   
+                     label=paste(substr(name, 1, 15), '...', sep=''),
+                     hjust=0, vjust=1.1, 
+                     size=2.5, color="#00A3A8")   
     }
-    
-    # print(Y)
-
-
-    mat = mat +
-        annotate("segment",
-                 x = width/2 + 0.5, xend = width/2 + 0.5,
-                 y = 1 - 0.5, yend = height + 0.5, 
-                 color="grey85")
 
     mat = mat +
 
@@ -606,7 +668,7 @@ matrice_panel = function (list_df2plot, df_meta) {
                        expand=c(0, 0)) + 
         
     scale_y_continuous(limits=c(1 - rel(0.5), 
-                                height + rel(1)),
+                                height + rel(2)),
                        expand=c(0, 0))
     
     return (mat)
diff --git a/script.R b/script.R
index 1101421..5702abf 100644
--- a/script.R
+++ b/script.R
@@ -23,7 +23,7 @@ filedir =
 ### MANUAL SELECTION ###
 # Name of the file that will be analysed from the AG directory
 filename =
-    # ""
+    ""
 
     # c(
       # "S2235610_HYDRO_QJM.txt", 
@@ -33,9 +33,9 @@ filename =
       # "A2250310_HYDRO_QJM.txt"
       # )
 
-    c("O3035210_HYDRO_QJM.txt",
-      "O3011010_HYDRO_QJM.txt",
-      "O1442910_HYDRO_QJM.txt")
+    # c("O3035210_HYDRO_QJM.txt",
+      # "O3011010_HYDRO_QJM.txt",
+      # "O1442910_HYDRO_QJM.txt")
 
 
 
@@ -45,8 +45,8 @@ AGlistdir =
     ""
 
 AGlistname = 
-    ""
-    # "Liste-station_RRSE.docx" 
+    # ""
+    "Liste-station_RRSE.docx" 
 
 
 ### NIVALE SELECTION ###
@@ -126,6 +126,12 @@ if (AGlistname != ""){
 
     filename = df_selec_AG[df_selec_AG$ok,]$filename
 
+
+    #####
+    filename = filename[1:16]
+    #####
+
+
     # Extract metadata about selected stations
     df_meta_AG = extract_meta(computer_data_path, filedir, filename)
 
-- 
GitLab