From 078352c66a54d4b1e7930d96df83579b577e81b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Grelot?= <frederic.grelot@irstea.fr>
Date: Sun, 23 Jan 2022 21:03:59 +0100
Subject: [PATCH] =?UTF-8?q?geau=20Version=201.0.10.0=200=20errors=20?=
 =?UTF-8?q?=E2=9C=94=20|=200=20warnings=20=E2=9C=94=20|=200=20notes=20?=
 =?UTF-8?q?=E2=9C=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

map_so_ii
	- theme catnat
		- affichage de la somme des arretés
		- gestion des périodes pour year
	- theme onrn
		- améloiration de la légende
	- theme population
		- gestion des périodes pour year

Refs #9
---
 geau/DESCRIPTION         |   2 +-
 geau/R/map_so_ii.r       | 329 ++++++++++++++++++++++++++++-----------
 geau/data/so_ii_onrn.rda | Bin 2936 -> 2946 bytes
 geau/man/map_so_ii.Rd    |  17 +-
 4 files changed, 255 insertions(+), 93 deletions(-)

diff --git a/geau/DESCRIPTION b/geau/DESCRIPTION
index adf2a63..f98b01a 100644
--- a/geau/DESCRIPTION
+++ b/geau/DESCRIPTION
@@ -1,6 +1,6 @@
 Package: geau
 Title: Utilities very useful to share within geau-inondation team
-Version: 1.0.9.0
+Version: 1.0.10.0
 Authors@R:
     c(
         person(given = "Frédéric",
diff --git a/geau/R/map_so_ii.r b/geau/R/map_so_ii.r
index f2c4f4d..2976c9a 100644
--- a/geau/R/map_so_ii.r
+++ b/geau/R/map_so_ii.r
@@ -4,11 +4,11 @@
 #' \subsection{detail specification}{
 #' For the specification of detail, it depends on the theme chosen.
 #' \itemize{
+#'   \item{\strong{catchment}: detail must be chosen in "none", "1", "2", "3"
+#'      for levels of detail. If missing, "1" will be chosen.}
 #'   \item{\strong{catnat}: detail must be chosen in "inondation",
 #'      "submersion", or "nappe". If missing all type will be chosen and
 #'      aggregated before plotting.}
-#'   \item{\strong{catchment}: detail must be chosen in "none", "1", "2", "3"
-#'      for levels of detail. If missing, "1" will be chosen.}
 #'   \item{\strong{collectivity}: detail must be chosen in "none", "syble",
 #'      "symbo", "epci" or "syndicate". If missing, "none" will be chosen,
 #'      and only the boundaries of collectivities are plotted.}
@@ -18,15 +18,22 @@
 #'      everything is plotted.}
 #'   \item{\strong{onrn}: detail must be chosen in "n_catnat", "freq_sin",
 #'      "cost", "cost_hab", "cost_mean", "ratio", "balance", "ppri_year".}
+#'   \item{\strong{population}: detail must be chosen in "absolute",
+#'      "relative". It used only when more than one year is provided to plot
+#'      aither absolute or relative evolution.}
 #' }
 #' }
 #' \subsection{year specification}{
 #' For the specification of year, it depends on the theme chosen.
 #' \itemize{
-#'   \item{\strong{catnat}: year corresponds to the year of data. If missing,
-#'      nothing is plotted.}
+#'   \item{\strong{catnat}: year corresponds to the year of data. If 2 or more
+#'      years are given, the sum of the period corresponding to the range of
+#'      given years is plotted. If missing, the whole available period is
+#'      plotted.}
 #'   \item{\strong{population}: year corresponds to the year of data. If
-#'      missing, last available year is plotted.}
+#'      missing, last available year is plotted. If 2 or more years are
+#'      provided an analysis of the evolution between the range of given
+#'      years is plotted.}
 #' }
 #' }
 #' 
@@ -90,7 +97,7 @@ map_so_ii = function(
         "collectivity" = map_theme_collectivity(detail, theme_legend),
         "hydro" = map_theme_hydro(detail, theme_legend),
         "onrn" = map_theme_onrn(detail, theme_legend),
-        "population" = map_theme_population(year, theme_legend),
+        "population" = map_theme_population(detail, year, theme_legend),
         NULL
     )
 
@@ -187,44 +194,27 @@ map_theme_catnat = function(detail, year, add_legend) {
         several.ok = TRUE
     )
 
-    theme_legend = NULL
-    border = NA
-    color = NA
-    if (!missing(year)) {
-        border = "grey80"
-        color_none = color
-        color_with = scales::alpha("grey80", .5)
-        legend_title  = switch(
-            EXPR = as.character(length(detail)),
-            "3" = "Cat Nat",
-            sprintf("Cat Nat [%s]", paste(sort(detail), collapse = " & "))
-        )
-        year = match.arg(
-            as.character(year),
-            dimnames(geau::so_ii_catnat)[["period"]]
-        )
-        catnat = apply(
-            geau::so_ii_catnat[, year, detail, drop = FALSE],
-            1:2,
-            sum
-        )
-        color = ifelse(
-            catnat > 0,
-            color_with,
-            color_none
-        )
-        theme_legend = list(
-            title = sprintf("%s %s", legend_title, year),
-            legend = c("Sans d\u00e9claration", "Avec d\u00e9claration"),
-            x = "topright",
-            cex = .8,
-            bg = "white",
-            inset = 0.01,
-            fill = c(color_none, color_with),
-            border = border
-        )
+    if (missing(year)) {
+        year = range(dimnames(geau::so_ii_catnat)[["period"]])
     }
+    year = match.arg(
+        as.character(year),
+        dimnames(geau::so_ii_catnat)[["period"]],
+        several.ok = TRUE
+    )
+    year = as.character(seq(min(year), max(year)))
+    catnat = apply(
+        geau::so_ii_catnat[, year, detail, drop = FALSE],
+        1,
+        sum
+    )
 
+    border = "grey80"
+    catnat_palette = scales::colour_ramp(c("white", "grey50"), alpha = .5)
+    color = scales::cscale(
+        c(0, catnat),
+        catnat_palette
+    )[-1]
     plot(
         geau::so_ii_collectivity[["geometry"]],
         border = border,
@@ -232,6 +222,34 @@ map_theme_catnat = function(detail, year, add_legend) {
         add = TRUE
     )
 
+    legend_title = sprintf(
+        "Cat Nat %s",
+        if (length(detail) == 3) "" else paste(sort(detail), collapse = " & ")
+    )
+    legend_title = sprintf(
+        "%s [%s]",
+        legend_title,
+        if (length(year) == 1) year else paste(range(year), collapse = "-")
+    )
+
+    value_legend = unique(sort(c(min(catnat), round(seq(0, max(catnat), length.out = 5)))))
+    color_legend = scales::cscale(
+        value_legend,
+        catnat_palette
+    )
+
+    theme_legend = list(
+        title = legend_title,
+        legend = value_legend,
+        x = "topright",
+        cex = .8,
+        bg = "white",
+        inset = 0.01,
+        fill = color_legend,
+        border = border,
+        text.width = max(graphics::strwidth(value_legend))
+    )
+
     if (add_legend == TRUE) {
         return(theme_legend)
     } else {
@@ -461,6 +479,7 @@ map_theme_onrn = function(detail, add_legend) {
             as.integer(signif(round(value_legend), 2)),
             big.mark = " "
         )
+        text.width = max(graphics::strwidth(text_legend))
     }
     color_legend = scales::cscale(
             c(onrn_range, value_legend),
@@ -472,7 +491,7 @@ map_theme_onrn = function(detail, add_legend) {
     }
     title_onrn = switch(
         EXPR = detail,
-        "n_catnat"  = "N arr\u00eat\u00e9s Cat-Nat (ONRN)",
+        "n_catnat"  = "Arr\u00eat\u00e9s Cat-Nat [1982-2021]",
         "freq_sin"  = "Sinistre / Risque [1995-2018]",
         "cost"      = "Co\u00fbt cumul\u00e9 (\u20AC) [1995-2018]",
         "cost_hab"  = "Co\u00fbt / hab (\u20ac) [1995-2018]",
@@ -493,7 +512,10 @@ map_theme_onrn = function(detail, add_legend) {
         fill = color_legend,
         border = border
     )
-
+    if (detail %in% c("balance", "cost")) {
+        theme_legend[["text.width"]] = max(graphics::strwidth(text_legend))
+    }
+    
     if (add_legend == TRUE) {
         return(theme_legend)
     } else {
@@ -501,58 +523,191 @@ map_theme_onrn = function(detail, add_legend) {
     }
 }
 
-map_theme_population = function(year, add_legend) {
+map_theme_population = function(detail, year, add_legend) {
     if (missing(year)) {
         year = utils::tail(sort(colnames(geau::so_ii_population)), 1)
     }
     year = match.arg(
         as.character(year),
-        sort(colnames(geau::so_ii_population))
-    )
-    population_palette = scales::colour_ramp(c("white", "red"), alpha = .5)
-    color = matrix(
-        scales::cscale(
-            geau::so_ii_population,
-            population_palette,
-            trans = scales::log_trans()),
-        nrow = nrow(geau::so_ii_population),
-        dimnames = dimnames(geau::so_ii_population)
+        sort(colnames(geau::so_ii_population)),
+        several.ok = TRUE
     )
+
     border = "grey80"
-    plot(
-        geau::so_ii_collectivity[["geometry"]],
-        border = border,
-        col = color[ , year],
-        add = TRUE
-    )
-    max_pop = max(geau::so_ii_population[ , year])
-    min_pop = min(geau::so_ii_population[ , year])
-    value_legend = unique(c(
-        min_pop,
-        10^(ceiling(log(min_pop)/log(10)):floor(log(max_pop)/log(10))),
-        max_pop
-    ))
-    color_legend = scales::cscale(
-            c(range(geau::so_ii_population), value_legend),
-            population_palette,
-            trans = scales::log_trans()
+
+    if (length(year) == 1) {
+        pop_palette = scales::colour_ramp(c("white", "red"), alpha = .5)
+        color = matrix(
+            scales::cscale(
+                geau::so_ii_population,
+                pop_palette,
+                trans = scales::log_trans()),
+            nrow = nrow(geau::so_ii_population),
+            dimnames = dimnames(geau::so_ii_population)
+        )
+
+        plot(
+            geau::so_ii_collectivity[["geometry"]],
+            border = border,
+            col = color[ , year],
+            add = TRUE
+        )
+        max_pop = max(geau::so_ii_population[ , year])
+        min_pop = min(geau::so_ii_population[ , year])
+        base = 10
+
+        value_legend = unique(c(
+            min_pop,
+            base^(ceiling(log(min_pop)/log(base)):floor(log(max_pop)/log(base))),
+            max_pop
+        ))
+        color_legend = scales::cscale(
+                c(range(geau::so_ii_population), value_legend),
+                pop_palette,
+                trans = scales::log_trans()
+            )[-(1:2)]
+        text_legend = formatC(
+            as.integer(value_legend),
+            big.mark = " "
+        )
+
+        theme_legend = list(
+            title = sprintf("Population %s", year),
+            legend = text_legend,
+            x = "topright",
+            cex = .8,
+            bg = "white",
+            inset = 0.01,
+            fill = color_legend,
+            border = border,
+            text.width = max(graphics::strwidth(text_legend))
+        )
+    }
+    
+    if (length(year) > 1) {
+        if (missing(detail)) {
+            detail = "absolute"
+        }
+        detail = match.arg(as.character(detail), c("absolute", "relative"))
+        year = range(year)
+
+        pop_palette = scales::colour_ramp(
+            c("red", "white", "green"),
+            alpha = .5
+        )
+        pop_data = switch(
+            EXPR = detail,
+            "absolute" = geau::so_ii_population[ , year[2]] -
+                geau::so_ii_population[ , year[1]],
+            "relative"  = (geau::so_ii_population[ , year[2]] -
+                geau::so_ii_population[ , year[1]]) /
+                geau::so_ii_population[ , year[1]]
+        )
+        range_data = max(abs(range(pop_data))) * c(-1, 1)
+        pop_trans = switch(
+            EXPR = detail,
+            "absolute"  = scales::modulus_trans(0.2),
+            "relative"  = scales::modulus_trans(0.1),
+            NULL
+        )
+        color = scales::cscale(
+            c(range_data, pop_data),
+            pop_palette,
+            trans = pop_trans
         )[-(1:2)]
-    text_legend = formatC(
-        as.integer(value_legend),
-        big.mark = " "
-    )
+        plot(
+            geau::so_ii_collectivity[["geometry"]],
+            border = border,
+            col = color,
+            add = TRUE
+        )
 
-    theme_legend = list(
-        title = sprintf("Population %s", year),
-        legend = text_legend,
-        x = "topright",
-        cex = .8,
-        bg = "white",
-        inset = 0.01,
-        fill = color_legend,
-        border = border,
-        text.width = graphics::strwidth(utils::tail(text_legend, 1))
-    )
+        max_pop = max(pop_data)
+        min_pop = min(pop_data)
+
+        if (detail == "absolute") {
+            range_pop = max(abs(c(max_pop, min_pop)))
+            base = max(10, 10^floor(ceiling(log(range_pop)/log(10)) / 2))
+
+            if (sign(min_pop) == -1) {
+                value_legend = c(
+                    -base^(floor(log(abs(min_pop))/log(base)):1),
+                    base^(1:floor(log(max_pop)/log(base)))
+                )
+                value_legend = value_legend[
+                    value_legend < max_pop &
+                    value_legend > min_pop &
+                    abs(value_legend) >= base
+                ]
+                value_legend = sort(c(0, range(pop_data), value_legend))
+            } else {
+                value_legend = unique(c(
+                    min_pop,
+                    base^(ceiling(log(min_pop)/log(base)):floor(log(max_pop)/log(base))),
+                    max_pop
+                ))
+            }
+            color_legend = scales::cscale(
+                c(range_data, value_legend),
+                pop_palette,
+                trans = pop_trans
+            )[-(1:2)]
+            text_legend = formatC(
+                as.integer(value_legend),
+                big.mark = " "
+            )
+            title_legend = sprintf("Population \u00e9volution [%s-%s]", year[1], year[2])
+        }
+
+        if (detail == "relative") {
+            max_pop = max(pop_data) * 100
+            min_pop = min(pop_data) * 100
+            range_pop = max(abs(c(max_pop, min_pop)))
+            base = max(10, 10^floor(ceiling(log(range_pop)/log(10)) / 2))
+
+            if (sign(min_pop) == -1) {
+                value_legend = unique(c(
+                    min_pop,
+                    -base^(floor(log(abs(min_pop))/log(base)):0),
+                    0,
+                    base^(0:floor(log(max_pop)/log(base))),
+                    max_pop
+                ))
+            } else {
+                value_legend = unique(c(
+                    min_pop,
+                    base^(ceiling(log(min_pop)/log(base)):floor(log(max_pop)/log(base))),
+                    max_pop
+                ))
+            }
+            color_legend = scales::cscale(
+                    c(range_data, value_legend / 100),
+                    pop_palette,
+                    trans = pop_trans
+                )[-(1:2)]
+            text_legend = sprintf(
+                "%s %%",
+                formatC(
+                    signif(value_legend, 3),
+                    digits = 2, format = "f", flag = "+",
+                    big.mark = " "
+                )
+            )
+            title_legend = sprintf("Population \u00e9volution [%s-%s]", year[1], year[2])
+        }
+
+        theme_legend = list(
+            title = title_legend,
+            legend = text_legend,
+            x = "topright",
+            cex = .8,
+            bg = "white",
+            inset = 0.01,
+            fill = color_legend,
+            border = border,
+            text.width = max(graphics::strwidth(text_legend))
+        )
+    }
 
     if (add_legend == TRUE) {
         return(theme_legend)
diff --git a/geau/data/so_ii_onrn.rda b/geau/data/so_ii_onrn.rda
index 5985ecbfe976d7619b844a785b0f048fdb6ff0eb..abc37b177092e92315c09e26ccdc278834f42cf9 100644
GIT binary patch
literal 2946
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

literal 2936
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
OL@0zy9K7kQ1N;|l^gf9I

diff --git a/geau/man/map_so_ii.Rd b/geau/man/map_so_ii.Rd
index a118b15..ba06eff 100644
--- a/geau/man/map_so_ii.Rd
+++ b/geau/man/map_so_ii.Rd
@@ -47,11 +47,11 @@ Plot a thematic map of so-ii
 \subsection{detail specification}{
 For the specification of detail, it depends on the theme chosen.
 \itemize{
+\item{\strong{catchment}: detail must be chosen in "none", "1", "2", "3"
+for levels of detail. If missing, "1" will be chosen.}
 \item{\strong{catnat}: detail must be chosen in "inondation",
 "submersion", or "nappe". If missing all type will be chosen and
 aggregated before plotting.}
-\item{\strong{catchment}: detail must be chosen in "none", "1", "2", "3"
-for levels of detail. If missing, "1" will be chosen.}
 \item{\strong{collectivity}: detail must be chosen in "none", "syble",
 "symbo", "epci" or "syndicate". If missing, "none" will be chosen,
 and only the boundaries of collectivities are plotted.}
@@ -61,15 +61,22 @@ hydrographic elements. If missing, "none" will be chosen, and
 everything is plotted.}
 \item{\strong{onrn}: detail must be chosen in "n_catnat", "freq_sin",
 "cost", "cost_hab", "cost_mean", "ratio", "balance", "ppri_year".}
+\item{\strong{population}: detail must be chosen in "absolute",
+"relative". It used only when more than one year is provided to plot
+aither absolute or relative evolution.}
 }
 }
 \subsection{year specification}{
 For the specification of year, it depends on the theme chosen.
 \itemize{
-\item{\strong{catnat}: year corresponds to the year of data. If missing,
-nothing is plotted.}
+\item{\strong{catnat}: year corresponds to the year of data. If 2 or more
+years are given, the sum of the period corresponding to the range of
+given years is plotted. If missing, the whole available period is
+plotted.}
 \item{\strong{population}: year corresponds to the year of data. If
-missing, last available year is plotted.}
+missing, last available year is plotted. If 2 or more years are
+provided an analysis of the evolution between the range of given
+years is plotted.}
 }
 }
 }
-- 
GitLab