diff --git a/plotting/layout.R b/plotting/layout.R index d8f671e800ce2a47f411655620f57f2b120e5665..fcb7b4a2a7a54913089f954644ad7d47f2b25c97 100644 --- a/plotting/layout.R +++ b/plotting/layout.R @@ -89,6 +89,9 @@ panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_op outdirTmp = file.path(outdir, 'tmp') if (!(file.exists(outdirTmp))) { dir.create(outdirTmp) + } else { + unlink(outdirTmp, recursive=TRUE) + dir.create(outdirTmp) } # Get all different stations code @@ -204,19 +207,44 @@ panels_layout = function (df_data, df_meta, layout_matrix, figdir='', filedir_op } - ### by 16 + # By + slice = 12 ## + 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 + - mat = matrice_panel(list_df2plot, df_meta, period) + for (j in 1:nbp) { + df_datatmp = list_df2plot[[j]]$data + df_trendtmp = list_df2plot[[j]]$trend - # Saving matrix plot - ggsave(plot=mat, - path=outdirTmp, - filename=paste('matrix', '.pdf', sep=''), - width=21, height=29.7, units='cm', dpi=100) + 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, + period) + + # Saving matrix plot + ggsave(plot=mat, + path=outdirTmp, + filename=paste('matrix_', i, '.pdf', sep=''), + width=29.7, height=21, units='cm', dpi=100) + + } # PDF combine pdf_combine(input=file.path(outdirTmp, list.files(outdirTmp)), output=file.path(outdir, outfile)) - unlink(outdirTmp, recursive=TRUE) + # unlink(outdirTmp, recursive=TRUE) } diff --git a/plotting/panel.R b/plotting/panel.R index 33e063e02a243688635483350d36de057816fa3b..88c470a37654c0bd642604b5e82eab294547cde6 100644 --- a/plotting/panel.R +++ b/plotting/panel.R @@ -221,7 +221,14 @@ time_panel = function (df_data_code, df_trend_code, type, p_threshold=0.1, missR y = gpct(100, codeQ, ref=0) - (ii-1)*dy xt = xend + gpct(1, codeDate) - label = bquote(bold(.(format(df_trend_code$trend, scientific=TRUE, digits=3)))~'['*m^{3}*'.'*s^{-1}*'.'*an^{-1}*']') + + trend = df_trend_code_per$trend + power = power = get_power(trend) + powerC = as.character(power) + brk = 10^power + trendC = as.character(round(trend / brk, 2)) + + label = bquote(bold(.(trendC)~'x'~'10'^{.(powerC)})~'['*m^{3}*'.'*s^{-1}*'.'*an^{-1}*']') p = p + annotate("segment", @@ -278,28 +285,42 @@ text_panel = function(code, df_meta) { text3 = paste( "<b>", - "Superficie : ", df_meta_code$surface_km2_IN, - ' (', df_meta_code$surface_km2_BH, ')', " [km<sup>2</sup>] <br>", - "X = ", df_meta_code$L93X_m_IN, - ' (', df_meta_code$L93X_m_BH, ')', " [m ; Lambert 93]", + "Superficie : ", df_meta_code$surface_km2_BH, " [km<sup>2</sup>] <br>", + "X = ", df_meta_code$L93X_m_BH, " [m ; Lambert 93]", "</b>", sep='') text4 = paste( "<b>", - "Altitude : ", df_meta_code$altitude_m_IN, - ' (', df_meta_code$altitude_m_BH, ')', " [m]<br>", - "Y = ", df_meta_code$L93Y_m_IN, - ' (', df_meta_code$L93Y_m_BH, ')', " [m ; Lambert 93]", + "Altitude : ", df_meta_code$altitude_m_BH, " [m]<br>", + "Y = ", df_meta_code$L93Y_m_BH, " [m ; Lambert 93]", "</b>", sep='') - text5 = paste( - "<b>", - "INRAE (Banque Hydro)<br>", - "INRAE (Banque Hydro)", - "</b>", - sep='') + # text3 = paste( + # "<b>", + # "Superficie : ", df_meta_code$surface_km2_IN, + # ' (', df_meta_code$surface_km2_BH, ')', " [km<sup>2</sup>] <br>", + # "X = ", df_meta_code$L93X_m_IN, + # ' (', df_meta_code$L93X_m_BH, ')', " [m ; Lambert 93]", + # "</b>", + # sep='') + + # text4 = paste( + # "<b>", + # "Altitude : ", df_meta_code$altitude_m_IN, + # ' (', df_meta_code$altitude_m_BH, ')', " [m]<br>", + # "Y = ", df_meta_code$L93Y_m_IN, + # ' (', df_meta_code$L93Y_m_BH, ')', " [m ; Lambert 93]", + # "</b>", + # sep='') + + # text5 = paste( + # "<b>", + # "INRAE (Banque Hydro)<br>", + # "INRAE (Banque Hydro)", + # "</b>", + # sep='') gtext1 = richtext_grob(text1, x=0, y=1, @@ -325,17 +346,17 @@ text_panel = function(code, df_meta) { hjust=0, vjust=1, gp=gpar(col="grey20", fontsize=9)) - gtext5 = richtext_grob(text5, - x=0, y=1, - margin=unit(c(t=0, r=5, b=5, l=5), "mm"), - hjust=0, vjust=1, - gp=gpar(col="grey20", fontsize=9)) + # gtext5 = richtext_grob(text5, + # x=0, y=1, + # margin=unit(c(t=0, r=5, b=5, l=5), "mm"), + # hjust=0, vjust=1, + # gp=gpar(col="grey20", fontsize=9)) gtext_merge = grid.arrange(grobs=list(gtext1, gtext2, gtext3, - gtext4, gtext5), + gtext4),#, gtext5), layout_matrix=matrix(c(1, 1, 1, 2, 2, 2, - 3, 4, 5), + 3, 4, 5), nrow=3, byrow=TRUE)) return(gtext_merge) @@ -351,14 +372,31 @@ matrice_panel = function (list_df2plot, df_meta, period) { 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) - df_trend = list_df2plot[[1]]$trend - for (j in 1:nCode) { code = Code[j] @@ -375,22 +413,20 @@ matrice_panel = function (list_df2plot, df_meta, period) { Periods = c() - for (i in 1:nPeriod) { - Periods = append(Periods, - paste(Start[i], End[i], sep=' / ')) - } + 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 - if (nPeriod > nPeriod_max) { - nPeriod_max = nPeriod - } } - TrendMean_code = array(rep(1, nPeriod_max*nbp*nCode), dim=c(nPeriod_max, nbp, nCode)) @@ -509,7 +545,7 @@ matrice_panel = function (list_df2plot, df_meta, period) { } height = length(Code) - width = nbp * 2 * nPeriod_max + width = nbp * 2 * nPeriod_max + nPeriod_max options(repr.plot.width=width, repr.plot.height=height) @@ -566,12 +602,13 @@ matrice_panel = function (list_df2plot, df_meta, period) { Xtmp = as.integer(factor(as.character(Type_mat_per))) - Xm = Xtmp + (j - 1)*nbp*2 - X = Xtmp + (j - 1)*nbp*2 + nbp + 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 = Xm[1] - 0.25 + x = Xc - 0.4 xend = X[length(X)] + 0.25 y = height + 1 yend = height + 1 @@ -582,25 +619,29 @@ matrice_panel = function (list_df2plot, df_meta, period) { 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))) + periodName = bquote(bold('Période')~bold(.(as.character(j)))) + # bquote(bold(.(Start))~'/'~bold(.(End))) mat = mat + - annotate("text", x=xt, y=yt, + annotate("text", x=x, y=yt, label=periodName, - hjust=0.5, vjust=0.5, + 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') + 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)) { @@ -627,17 +668,28 @@ matrice_panel = function (list_df2plot, df_meta, period) { size=3, color='grey40') } + mat = mat + + annotate('text', x=Xc, y=max(Y) + 0.8, + 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.6, + annotate('text', x=X[i], y=max(Y) + 0.7, label=bquote(.(type)), - hjust=0.5, vjust=0, + hjust=0.5, vjust=0.5, size=3.5, color='grey20') + - annotate('text', x=Xm[i], y=max(Y) + 0.6, - label=bquote(.(type)*'b'), - hjust=0.5, vjust=0, + annotate('text', x=Xm[i], y=max(Y) + 0.7, + label=bquote('µ'*.(type)), + hjust=0.5, vjust=0.5, size=3.5, color='grey20') } } @@ -646,29 +698,62 @@ matrice_panel = function (list_df2plot, df_meta, period) { code = Code[i] name = df_meta[df_meta$code == code,]$nom + ncharMax = 30 + if (nchar(name) > ncharMax) { + name = paste(substr(name, 1, ncharMax), '...', sep='') + } + label = bquote(.(name)~'-'~bold(.(code))) + # period_code = Periods_code[[i]] + # nPeriod_code = length(period_code) + # dy = 0.17 + # shift = as.integer((nPeriod_code + 1) / 2) * dy ### not ok mat = mat + - annotate('text', x=-1, y=i, - label=bquote(bold(.(code))), - hjust=0, vjust=-0.1, - size=3.5, color="#00A3A8") + - - annotate('text', x=-1, y=i, - label=paste(substr(name, 1, 15), '...', sep=''), - hjust=0, vjust=1.1, - size=2.5, color="#00A3A8") + annotate('text', x=0.3, y=i, + label=label, + hjust=1, vjust=0.5, + size=3.5, color="#00A3A8") + + # for (j in 1:nPeriod_code) { + # periodj = bquote('Période'~.(j)~':'~.(period_code[j])) + + # mat = mat + + # annotate('text', x=0.3, y=i + shift - dy*j, + # label=periodj, + # hjust=1, vjust=0.5, + # size=3, 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.1, + label=bquote(bold(.(periodStart))), + hjust=0.5, vjust=0.5, + size=3, color='grey40') + + + annotate('text', x=Xc, y=i - 0.1, + 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(2), + 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)), + height + rel(1.25)), expand=c(0, 0)) return (mat) diff --git a/processing/format.R b/processing/format.R index e60138773eedff650f86051c4dbec10f71bc0b6c..21d6c928c6480bf9d607995025d1d5b17e2f7329 100644 --- a/processing/format.R +++ b/processing/format.R @@ -2,38 +2,44 @@ library(dplyr) -join = function (df_data_BH, df_data_NV, df_meta_BH, df_meta_NV) { +join = function (df_data_AG, df_data_NV, df_meta_AG, df_meta_NV) { - if (!is.null(df_data_NV) & !is.null(df_data_BH)) { + if (!is.null(df_data_NV) & !is.null(df_data_AG)) { # Get the station in common - common = levels(factor(df_meta_NV[df_meta_NV$code %in% df_meta_BH$code,]$code)) + common = levels(factor(df_meta_NV[df_meta_NV$code %in% df_meta_AG$code,]$code)) # Get the Nv station to add - NVadd = levels(factor(df_meta_NV[!(df_meta_NV$code %in% df_meta_BH$code),]$code)) + NVadd = levels(factor(df_meta_NV[!(df_meta_NV$code %in% df_meta_AG$code),]$code)) # Select only the NV meta to add df_meta_NVadd = df_meta_NV[df_meta_NV$code %in% NVadd,] - # Join NV data to BH data - df_meta = full_join(df_meta_BH, df_meta_NVadd, by=c("code", "nom", "L93X", "L93Y", "surface_km2", "file_path")) + + df_meta_AG$source = 'AG' + df_meta_NVadd$source = 'NV' + + # Join NV data to AG data + df_meta = full_join(df_meta_AG, df_meta_NVadd) # Select only the NV data to add df_data_NVadd = df_data_NV[df_data_NV$code %in% NVadd,] - # Join NV meta to BH meta - df_data = full_join(df_data_BH, df_data_NVadd, by=c("Date", "Qm3s", "code")) - - } else if (is.null(df_data_NV) & !is.null(df_data_BH)) { - df_meta = df_meta_BH - df_data = df_data_BH - df_data_NVadd = NULL - } else if (!is.null(df_data_NV) & is.null(df_data_BH)) { + # Join NV meta to AG meta + df_data = full_join(df_data_AG, df_data_NVadd) + + } else if (is.null(df_data_NV) & !is.null(df_data_AG)) { + df_meta_AG$source = 'AG' + df_meta = df_meta_AG + df_data = df_data_AG + + } else if (!is.null(df_data_NV) & is.null(df_data_AG)) { + df_meta_NV$source = 'NV' df_meta = df_meta_NV df_data = df_data_NV - df_data_NVadd = df_data_NV + } else { stop('No data') } - return (list(data=df_data, meta=df_meta, NVadd=df_data_NVadd)) + return (list(data=df_data, meta=df_meta)) } diff --git a/script.R b/script.R index 5702abfdf59546765c8bdfa8f3e9166bf49e81f3..1263530e7bba5ff8e063b798ba1f81ba599e9fdd 100644 --- a/script.R +++ b/script.R @@ -128,7 +128,7 @@ if (AGlistname != ""){ ##### - filename = filename[1:16] + # filename = filename[(1+30):(16+30)] ##### @@ -149,6 +149,12 @@ if (NVlistname != ""){ filename = df_selec_NV[df_selec_NV$ok,]$filename + + ##### + # filename = filename[(1+20):(16+20)] + ##### + + # Extract metadata about selected stations df_meta_NV = extract_meta(computer_data_path, filedir, filename)