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