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