From 01b6423dd61bc1aebc45dfc9ae1c4352b3114eb6 Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 12 Apr 2021 11:08:21 +0200 Subject: [PATCH 1/8] renommage de graphique 1_3 en 1/5 et debut de creation carte --- DESCRIPTION | 1 + NAMESPACE | 10 +++- R/creer_carte_1_3.R | 43 ++++++++++++++++++ R/{creer_graphe_1_3.R => creer_graphe_1_5.R} | 8 ++-- data/teruti.rda | Bin 13594 -> 13578 bytes devstuff_history.R | 14 +++--- .../publication/skeleton/skeleton.Rmd | 2 +- man/creer_carte_1_3.Rd | 20 ++++++++ ...reer_graphe_1_3.Rd => creer_graphe_1_5.Rd} | 10 ++-- tests/testthat/test-creer_carte_1_3.R | 3 ++ ...r_graphe_1_3.R => test-creer_graphe_1_5.R} | 4 +- vignettes/ac-ch1-3.Rmd | 10 ++-- vignettes/ae-ch1-5.Rmd | 25 ++++++++++ vignettes/test.R | 32 +++++++++++++ 14 files changed, 158 insertions(+), 24 deletions(-) create mode 100644 R/creer_carte_1_3.R rename R/{creer_graphe_1_3.R => creer_graphe_1_5.R} (96%) create mode 100644 man/creer_carte_1_3.Rd rename man/{creer_graphe_1_3.Rd => creer_graphe_1_5.Rd} (72%) create mode 100644 tests/testthat/test-creer_carte_1_3.R rename tests/testthat/{test-creer_graphe_1_3.R => test-creer_graphe_1_5.R} (52%) create mode 100644 vignettes/ae-ch1-5.Rmd diff --git a/DESCRIPTION b/DESCRIPTION index e6202da..05e8ea4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,6 +30,7 @@ Imports: lubridate, magrittr, scales, + sf, tidyr, tricky, utils diff --git a/NAMESPACE b/NAMESPACE index 059c749..505fa4d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,8 +1,9 @@ # Generated by roxygen2: do not edit by hand export("%>%") +export(creer_carte_1_3) export(creer_graphe_1_1) -export(creer_graphe_1_3) +export(creer_graphe_1_5) export(format_fr_pct) importFrom(attempt,stop_if_not) importFrom(dplyr,arrange) @@ -10,6 +11,7 @@ importFrom(dplyr,desc) importFrom(dplyr,filter) importFrom(dplyr,first) importFrom(dplyr,group_by) +importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,pull) importFrom(dplyr,select) @@ -20,19 +22,25 @@ importFrom(forcats,fct_reorder) importFrom(ggiraph,geom_point_interactive) importFrom(ggiraph,ggiraph) importFrom(ggplot2,aes) +importFrom(ggplot2,coord_sf) importFrom(ggplot2,element_text) importFrom(ggplot2,geom_bar) importFrom(ggplot2,geom_col) +importFrom(ggplot2,geom_sf) importFrom(ggplot2,geom_text) importFrom(ggplot2,ggplot) importFrom(ggplot2,labs) +importFrom(ggplot2,scale_fill_gradient2) importFrom(ggplot2,scale_fill_manual) +importFrom(ggplot2,scale_size_area) importFrom(ggplot2,scale_y_continuous) +importFrom(ggplot2,stat_sf_coordinates) importFrom(ggplot2,theme) importFrom(glue,glue) importFrom(lubridate,make_date) importFrom(magrittr,"%>%") importFrom(scales,number_format) +importFrom(sf,st_as_sf) importFrom(tidyr,gather) importFrom(tidyr,spread) importFrom(tricky,set_standard_names) diff --git a/R/creer_carte_1_3.R b/R/creer_carte_1_3.R new file mode 100644 index 0000000..2ea75b0 --- /dev/null +++ b/R/creer_carte_1_3.R @@ -0,0 +1,43 @@ +#' Creation de la Carte communale Pays de la Loire de l'artificialisation en volume selon OCSGE +#' @description Carte communale Pays de la Loire de l'artificialisation en volume selon OCSGE +#' +#' @param millesime_ocsge une année parmi les millesimes sélectionnables par l'utilisateur, au format numerique. +#' +#' @return Une carte +#' +#' @importFrom dplyr filter mutate left_join +#' @importFrom ggplot2 ggplot aes geom_sf labs scale_size_area scale_fill_gradient2 coord_sf stat_sf_coordinates +#' @importFrom glue glue +#' @importFrom lubridate make_date +#' @importFrom sf st_as_sf +#' +#' @export +#' +#' @examples +#' creer_carte_1_3(millesime_ocsge=2017) + +creer_carte_1_3 <- function(millesime_ocsge){ + + data <- result %>% + dplyr::filter(.data$TypeZone == "Communes", + .data$date == lubridate::make_date(millesime_ocsge,"01","01"), + .data$variable == "espace_artificialise") %>% + dplyr::mutate(valeur=round(.data$valeur / 10000,0))%>% + dplyr::left_join(communes_geo,by=c("CodeZone"="DEPCOM")) + + carte_1_3 <- ggplot2::ggplot(sf::st_as_sf(data))+ + ggplot2::geom_sf(fill="white")+ + ggplot2::stat_sf_coordinates(ggplot2::aes(size=valeur,fill=valeur),color="black",shape=21, + alpha = .5)+ + ggplot2::scale_fill_gradient2(name="surface en hectares", + low="darkblue", + mid="white",high="darkred")+ + ggplot2::scale_size_area(name=" ", max_size=10)+ + ggplot2::coord_sf(datum=NA)+ + ggplot2::labs(title= glue::glue("Artificialisation en Pays de la Loire en {millesime_ocsge}"),subtitle="",x="",y="", + caption = glue::glue("Source : OCSGE {millesime_ocsge}")) + + + return(carte_1_3) + +} diff --git a/R/creer_graphe_1_3.R b/R/creer_graphe_1_5.R similarity index 96% rename from R/creer_graphe_1_3.R rename to R/creer_graphe_1_5.R index 6d0ab6c..5a42144 100644 --- a/R/creer_graphe_1_3.R +++ b/R/creer_graphe_1_5.R @@ -17,9 +17,9 @@ #' @export #' #' @examples -#' creer_graphe_1_3(millesime_teruti=2018) +#' creer_graphe_1_5(millesime_teruti=2018) -creer_graphe_1_3 <- function(millesime_teruti){ +creer_graphe_1_5 <- function(millesime_teruti){ # Creation de la table utile a la production du graphique data <- teruti %>% @@ -42,7 +42,7 @@ creer_graphe_1_3 <- function(millesime_teruti){ dplyr::arrange(.data$codezone, dplyr::desc(.data$variable)) %>% dplyr::mutate(position = cumsum(.data$valeur) - 0.5 * .data$valeur) - graph_1_3<-data %>% + graph_1_5<-data %>% ggplot2::ggplot(ggplot2::aes(x=.data$zone,y=.data$valeur)) + ggplot2::geom_col(ggplot2::aes(fill = .data$variable), width = 0.9)+ ggplot2::geom_text(ggplot2::aes(y = .data$position, label = paste0(round(.data$valeur,1),"%"), group =.data$variable), color = "white", size=3)+ @@ -55,6 +55,6 @@ creer_graphe_1_3 <- function(millesime_teruti){ ggplot2::scale_x_discrete(limits=rev) + ggplot2::scale_fill_manual(values = gouvdown::gouv_palettes[["pal_gouv_i"]][1:2]) - return(graph_1_3) + return(graph_1_5) } diff --git a/data/teruti.rda b/data/teruti.rda index 55042be8bbf4760aa54403893d4ad833acdc88a7..60723695fc1c71f788fff0b18bafd7158358963f 100644 GIT binary patch delta 12523 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 delta 12535 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 diff --git a/devstuff_history.R b/devstuff_history.R index 9f9d5d2..0e3bdf7 100644 --- a/devstuff_history.R +++ b/devstuff_history.R @@ -30,13 +30,15 @@ usethis::use_vignette("aa-ch1-1","aa- Chapitre 1 Graphe 1") usethis::use_r("creer_graphe_1_1") usethis::use_test("creer_graphe_1_1") +##creer_carte_1_3 +usethis::use_vignette("ac-ch1-3","ac- Chapitre 1 Carte 3") +usethis::use_r("creer_carte_1_3") +usethis::use_test("creer_carte_1_3") -##creer_graphe_1_3 -usethis::use_vignette("ac-ch1-3","ac- Chapitre 1 Graphe 3") -usethis::use_r("creer_graphe_1_3") -usethis::use_test("creer_graphe_1_3") - - +##creer_graphe_1_5 +usethis::use_vignette("ae-ch1-5","ae- Chapitre 1 Graphe 5") +usethis::use_r("creer_graphe_1_5") +usethis::use_test("creer_graphe_1_5") ## A faire tourner avant chaque commit # usethis::use_r("globals.R") # liste les objets à passer en variables globales diff --git a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd index e383d76..343817c 100644 --- a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd +++ b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd @@ -33,7 +33,7 @@ texte...... ```{r graph part surfaces artificialisees} -creer_graphe_1_3( params$millesime_teruti) +creer_graphe_1_5( params$millesime_teruti) ``` texte... diff --git a/man/creer_carte_1_3.Rd b/man/creer_carte_1_3.Rd new file mode 100644 index 0000000..a678fcb --- /dev/null +++ b/man/creer_carte_1_3.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/creer_carte_1_3.R +\name{creer_carte_1_3} +\alias{creer_carte_1_3} +\title{Creation de la Carte communale Pays de la Loire de l'artificialisation en volume selon OCSGE} +\usage{ +creer_carte_1_3(millesime_ocsge) +} +\arguments{ +\item{millesime_ocsge}{une année parmi les millesimes sélectionnables par l'utilisateur, au format numerique.} +} +\value{ +Une carte +} +\description{ +Carte communale Pays de la Loire de l'artificialisation en volume selon OCSGE +} +\examples{ +creer_carte_1_3(millesime_ocsge=2017) +} diff --git a/man/creer_graphe_1_3.Rd b/man/creer_graphe_1_5.Rd similarity index 72% rename from man/creer_graphe_1_3.Rd rename to man/creer_graphe_1_5.Rd index aa9de03..a708bb7 100644 --- a/man/creer_graphe_1_3.Rd +++ b/man/creer_graphe_1_5.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/creer_graphe_1_3.R -\name{creer_graphe_1_3} -\alias{creer_graphe_1_3} +% Please edit documentation in R/creer_graphe_1_5.R +\name{creer_graphe_1_5} +\alias{creer_graphe_1_5} \title{Creation du graphique de la part des surfaces artificialisees (Teruti-Lucas)} \usage{ -creer_graphe_1_3(millesime_teruti) +creer_graphe_1_5(millesime_teruti) } \arguments{ \item{millesime_teruti}{une année parmi les millesimes sélectionnables par l'utilisateur, au format numerique.} @@ -16,5 +16,5 @@ Un diagramme en barres Graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale en \% (Teruti-Lucas) } \examples{ -creer_graphe_1_3(millesime_teruti=2018) +creer_graphe_1_5(millesime_teruti=2018) } diff --git a/tests/testthat/test-creer_carte_1_3.R b/tests/testthat/test-creer_carte_1_3.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/test-creer_carte_1_3.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/test-creer_graphe_1_3.R b/tests/testthat/test-creer_graphe_1_5.R similarity index 52% rename from tests/testthat/test-creer_graphe_1_3.R rename to tests/testthat/test-creer_graphe_1_5.R index 60b51cb..d4e42b8 100644 --- a/tests/testthat/test-creer_graphe_1_3.R +++ b/tests/testthat/test-creer_graphe_1_5.R @@ -1,7 +1,7 @@ -test_that("creer_graphe_1_3 fonctionne", { +test_that("creer_graphe_1_5 fonctionne", { # Test que le graphe est un ggplot - objet <- creer_graphe_1_3(millesime_teruti = 2018) + objet <- creer_graphe_1_5(millesime_teruti = 2018) testthat::expect_equal(attr(objet, "class"), c("gg","ggplot")) }) diff --git a/vignettes/ac-ch1-3.Rmd b/vignettes/ac-ch1-3.Rmd index 0b144f7..becf372 100644 --- a/vignettes/ac-ch1-3.Rmd +++ b/vignettes/ac-ch1-3.Rmd @@ -1,8 +1,8 @@ --- -title: "ac- Chapitre 1 Graphe 3" +title: "ac- Chapitre 1 Carte 3" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{ac- Chapitre 1 Graphe 3} + %\VignetteIndexEntry{ac- Chapitre 1 Carte 3} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -15,11 +15,11 @@ knitr::opts_chunk$set( ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + ggplot2::theme(plot.caption.position = "plot")) ``` + # Descriptif -La fonction `creer_graphe_1_3()` produit le graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale (Teruti-Lucas). +La fonction `creer_carte_1_5()` produit la carte communale des Pays de la Loire de l'artificialisation en volume selon OCSGE. ```{r setup} library(propre.artificialisation) - - creer_graphe_1_3(millesime_teruti=2018) +creer_carte_1_3(millesime_ocsge=2017) ``` diff --git a/vignettes/ae-ch1-5.Rmd b/vignettes/ae-ch1-5.Rmd new file mode 100644 index 0000000..c49b945 --- /dev/null +++ b/vignettes/ae-ch1-5.Rmd @@ -0,0 +1,25 @@ +--- +title: "ac- Chapitre 1 Graphe 5" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{ac- Chapitre 1 Graphe 5} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) +``` +# Descriptif +La fonction `creer_graphe_1_3()` produit le graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale (Teruti-Lucas). + +```{r setup} +library(propre.artificialisation) + + creer_graphe_1_5(millesime_teruti=2018) +``` diff --git a/vignettes/test.R b/vignettes/test.R index 9eac1d9..cf691a5 100644 --- a/vignettes/test.R +++ b/vignettes/test.R @@ -1,3 +1,35 @@ +library(propre.artificialisation) +library(dplyr) +library(gouvdown) +library(COGiter) + +millesime_ocsge <- 2017 + +data <- result %>% + dplyr::filter(.data$TypeZone == "Communes", + .data$date == lubridate::make_date(millesime_ocsge,"01","01"), + .data$variable == "espace_artificialise") %>% + dplyr::mutate(valeur=round(.data$valeur / 10000,0))%>% + dplyr::left_join(communes_geo,by=c("CodeZone"="DEPCOM")) + +carte_1_2 <- ggplot2::ggplot(sf::st_as_sf(data))+ + ggplot2::geom_sf(fill="white")+ + ggplot2::stat_sf_coordinates(ggplot2::aes(size=valeur,fill=valeur),color="black",shape=21, + alpha = .5)+ + ggplot2::scale_fill_gradient2(name="surface en hectares", + low="darkblue", + mid="white",high="darkred")+ + ggplot2::scale_size_area(name=" ", max_size=10)+ + ggplot2::coord_sf(datum=NA)+ + ggplot2::labs(title= glue::glue("Artificialisation en Pays de la Loire en {millesime_ocsge}"),subtitle="",x="",y="", + caption = glue::glue("Source : OCSGE {millesime_ocsge}")) + + + + + + + library(dplyr) library(gouvdown) millesime_teruti <- 2018 -- GitLab From 3dc871ca95bd522dade028be11c923ada653e0cd Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 12 Apr 2021 11:33:54 +0200 Subject: [PATCH 2/8] corrections --- vignettes/ac-ch1-3.Rmd | 5 ++--- vignettes/ae-ch1-5.Rmd | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/vignettes/ac-ch1-3.Rmd b/vignettes/ac-ch1-3.Rmd index becf372..092e53b 100644 --- a/vignettes/ac-ch1-3.Rmd +++ b/vignettes/ac-ch1-3.Rmd @@ -12,12 +12,11 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) + ``` # Descriptif -La fonction `creer_carte_1_5()` produit la carte communale des Pays de la Loire de l'artificialisation en volume selon OCSGE. +La fonction `creer_carte_1_3()` produit la carte communale des Pays de la Loire de l'artificialisation en volume selon OCSGE. ```{r setup} library(propre.artificialisation) diff --git a/vignettes/ae-ch1-5.Rmd b/vignettes/ae-ch1-5.Rmd index c49b945..493d57d 100644 --- a/vignettes/ae-ch1-5.Rmd +++ b/vignettes/ae-ch1-5.Rmd @@ -16,7 +16,7 @@ ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 1 ggplot2::theme(plot.caption.position = "plot")) ``` # Descriptif -La fonction `creer_graphe_1_3()` produit le graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale (Teruti-Lucas). +La fonction `creer_graphe_1_5()` produit le graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale (Teruti-Lucas). ```{r setup} library(propre.artificialisation) -- GitLab From 0340ccbdc228465574c133cdea04141431ba1944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Theuliere?= <mael.theuliere@developpement-durable.gouv.fr> Date: Mon, 12 Apr 2021 12:15:45 +0200 Subject: [PATCH 3/8] fix bug gestion COGiter dans la carte et gouvdown dans les vignette --- DESCRIPTION | 2 ++ R/creer_carte_1_3.R | 2 +- R/globals.R | 2 +- vignettes/aa-ch1-1.Rmd | 10 ++++++---- vignettes/ac-ch1-3.Rmd | 2 +- vignettes/ae-ch1-5.Rmd | 11 ++++++----- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 05e8ea4..c34c788 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,6 +21,7 @@ Depends: R (>= 2.10) Imports: attempt, + COGiter, dplyr, forcats, ggiraph, @@ -41,6 +42,7 @@ Suggests: VignetteBuilder: knitr Remotes: + maeltheuliere/COGiter, pachevalier/tricky, spyrales/gouvdown Config/testthat/edition: 3 diff --git a/R/creer_carte_1_3.R b/R/creer_carte_1_3.R index 2ea75b0..eb32768 100644 --- a/R/creer_carte_1_3.R +++ b/R/creer_carte_1_3.R @@ -23,7 +23,7 @@ creer_carte_1_3 <- function(millesime_ocsge){ .data$date == lubridate::make_date(millesime_ocsge,"01","01"), .data$variable == "espace_artificialise") %>% dplyr::mutate(valeur=round(.data$valeur / 10000,0))%>% - dplyr::left_join(communes_geo,by=c("CodeZone"="DEPCOM")) + dplyr::left_join(COGiter::communes_geo,by=c("CodeZone"="DEPCOM")) carte_1_3 <- ggplot2::ggplot(sf::st_as_sf(data))+ ggplot2::geom_sf(fill="white")+ diff --git a/R/globals.R b/R/globals.R index b79bd5b..593318a 100644 --- a/R/globals.R +++ b/R/globals.R @@ -1,3 +1,3 @@ utils::globalVariables( - c("teruti",".data","variable","valeur") + c("teruti","result",".data","variable","valeur") ) diff --git a/vignettes/aa-ch1-1.Rmd b/vignettes/aa-ch1-1.Rmd index bd19076..1a4936c 100644 --- a/vignettes/aa-ch1-1.Rmd +++ b/vignettes/aa-ch1-1.Rmd @@ -12,15 +12,17 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) + ``` # Descriptif La fonction `creer_graphe_1_1()` produit le graphique des taux d'artificialisation par region (Teruti-Lucas). -```{r setup} +```{r viz} +library(gouvdown) library(propre.artificialisation) - creer_graphe_1_1(millesime_teruti=2018) +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) +creer_graphe_1_1(millesime_teruti=2018) ``` diff --git a/vignettes/ac-ch1-3.Rmd b/vignettes/ac-ch1-3.Rmd index 092e53b..b9164de 100644 --- a/vignettes/ac-ch1-3.Rmd +++ b/vignettes/ac-ch1-3.Rmd @@ -18,7 +18,7 @@ knitr::opts_chunk$set( # Descriptif La fonction `creer_carte_1_3()` produit la carte communale des Pays de la Loire de l'artificialisation en volume selon OCSGE. -```{r setup} +```{r viz} library(propre.artificialisation) creer_carte_1_3(millesime_ocsge=2017) ``` diff --git a/vignettes/ae-ch1-5.Rmd b/vignettes/ae-ch1-5.Rmd index 493d57d..8f91e19 100644 --- a/vignettes/ae-ch1-5.Rmd +++ b/vignettes/ae-ch1-5.Rmd @@ -12,14 +12,15 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) + ``` # Descriptif La fonction `creer_graphe_1_5()` produit le graphique en barres de la part des surfaces artificialisees dans la surface departementale et regionale (Teruti-Lucas). -```{r setup} +```{r viz} library(propre.artificialisation) - - creer_graphe_1_5(millesime_teruti=2018) +library(gouvdown) +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) +creer_graphe_1_5(millesime_teruti=2018) ``` -- GitLab From f2f12cb280d37debaaecaa30f5d5f93143a214f8 Mon Sep 17 00:00:00 2001 From: Daniel Kalioudjoglou <daniel.kalioudjoglou@developpement-durable.gouv.fr> Date: Mon, 12 Apr 2021 13:46:00 +0200 Subject: [PATCH 4/8] Creation du test et integration de la carte dans skeleton --- .../templates/publication/skeleton/skeleton.Rmd | 16 ++++++++++++++-- tests/testthat/test-creer_carte_1_3.R | 8 ++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd index 343817c..f366fe7 100644 --- a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd +++ b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd @@ -7,14 +7,14 @@ output: logo: "prefecture_r52" params: millesime_teruti: 2018 - millesime_ocsge: 2019 + millesime_ocsge: 2017 millesime_observatoire_artificialisation: 2019 title: "L'artificialisation des sols en Pays de la loire en `r params$millesime_observatoire_artificialisation`" --- ```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) +knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, error = FALSE) library(gouvdown) library(propre.artificialisation) ``` @@ -26,13 +26,25 @@ texte d'introduction... texte...... ```{r diag barres taux artificialisation par region} +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) creer_graphe_1_1( params$millesime_teruti) ``` texte...... +```{r carte communale artificialisation en volume} +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) +creer_carte_1_3( params$millesime_ocsge) +``` + +texte...... + ```{r graph part surfaces artificialisees} +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) creer_graphe_1_5( params$millesime_teruti) ``` diff --git a/tests/testthat/test-creer_carte_1_3.R b/tests/testthat/test-creer_carte_1_3.R index 8849056..5b2f55e 100644 --- a/tests/testthat/test-creer_carte_1_3.R +++ b/tests/testthat/test-creer_carte_1_3.R @@ -1,3 +1,7 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) +test_that("creer_CARTE_1_3 fonctionne", { + + # Test que la carte est un ggplot + objet <- creer_carte_1_3(millesime_ocsge = 2017) + testthat::expect_equal(attr(objet, "class"), c("gg","ggplot")) + }) -- GitLab From d1ee18028e2be5a39870cee2853214103aa6b714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Theuliere?= <mael.theuliere@developpement-durable.gouv.fr> Date: Thu, 15 Apr 2021 14:53:04 +0200 Subject: [PATCH 5/8] utilisation de mapfactory --- DESCRIPTION | 2 ++ NAMESPACE | 9 ++------- R/creer_carte_1_3.R | 41 ++++++++++++++++++++--------------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c34c788..ed1fb81 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,6 +29,7 @@ Imports: glue, gouvdown (>= 0.0.0.9000), lubridate, + mapfactory, magrittr, scales, sf, @@ -42,6 +43,7 @@ Suggests: VignetteBuilder: knitr Remotes: + gitlab::dreal-datalab/mapfactory maeltheuliere/COGiter, pachevalier/tricky, spyrales/gouvdown diff --git a/NAMESPACE b/NAMESPACE index 505fa4d..cfd6daf 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -11,7 +11,6 @@ importFrom(dplyr,desc) importFrom(dplyr,filter) importFrom(dplyr,first) importFrom(dplyr,group_by) -importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,pull) importFrom(dplyr,select) @@ -22,25 +21,21 @@ importFrom(forcats,fct_reorder) importFrom(ggiraph,geom_point_interactive) importFrom(ggiraph,ggiraph) importFrom(ggplot2,aes) -importFrom(ggplot2,coord_sf) importFrom(ggplot2,element_text) importFrom(ggplot2,geom_bar) importFrom(ggplot2,geom_col) -importFrom(ggplot2,geom_sf) importFrom(ggplot2,geom_text) importFrom(ggplot2,ggplot) importFrom(ggplot2,labs) -importFrom(ggplot2,scale_fill_gradient2) importFrom(ggplot2,scale_fill_manual) -importFrom(ggplot2,scale_size_area) importFrom(ggplot2,scale_y_continuous) -importFrom(ggplot2,stat_sf_coordinates) importFrom(ggplot2,theme) importFrom(glue,glue) importFrom(lubridate,make_date) importFrom(magrittr,"%>%") +importFrom(mapfactory,creer_carte_communes_prop) +importFrom(mapfactory,fond_carto) importFrom(scales,number_format) -importFrom(sf,st_as_sf) importFrom(tidyr,gather) importFrom(tidyr,spread) importFrom(tricky,set_standard_names) diff --git a/R/creer_carte_1_3.R b/R/creer_carte_1_3.R index eb32768..afeb214 100644 --- a/R/creer_carte_1_3.R +++ b/R/creer_carte_1_3.R @@ -5,37 +5,36 @@ #' #' @return Une carte #' -#' @importFrom dplyr filter mutate left_join -#' @importFrom ggplot2 ggplot aes geom_sf labs scale_size_area scale_fill_gradient2 coord_sf stat_sf_coordinates +#' @importFrom dplyr filter mutate #' @importFrom glue glue -#' @importFrom lubridate make_date -#' @importFrom sf st_as_sf +#' @importFrom mapfactory creer_carte_communes_prop fond_carto #' #' @export #' #' @examples #' creer_carte_1_3(millesime_ocsge=2017) + creer_carte_1_3 <- function(millesime_ocsge){ data <- result %>% - dplyr::filter(.data$TypeZone == "Communes", - .data$date == lubridate::make_date(millesime_ocsge,"01","01"), - .data$variable == "espace_artificialise") %>% - dplyr::mutate(valeur=round(.data$valeur / 10000,0))%>% - dplyr::left_join(COGiter::communes_geo,by=c("CodeZone"="DEPCOM")) - - carte_1_3 <- ggplot2::ggplot(sf::st_as_sf(data))+ - ggplot2::geom_sf(fill="white")+ - ggplot2::stat_sf_coordinates(ggplot2::aes(size=valeur,fill=valeur),color="black",shape=21, - alpha = .5)+ - ggplot2::scale_fill_gradient2(name="surface en hectares", - low="darkblue", - mid="white",high="darkred")+ - ggplot2::scale_size_area(name=" ", max_size=10)+ - ggplot2::coord_sf(datum=NA)+ - ggplot2::labs(title= glue::glue("Artificialisation en Pays de la Loire en {millesime_ocsge}"),subtitle="",x="",y="", - caption = glue::glue("Source : OCSGE {millesime_ocsge}")) + dplyr::filter(.data$variable == "espace_artificialise") %>% + dplyr::mutate(valeur=round(.data$valeur / 10000,0)) + + fond_carto <- mapfactory::fond_carto(nom_reg = "Pays de la Loire") + + carte_1_3 <- mapfactory::creer_carte_communes_prop(data = data, + code_region = "52", + carto = fond_carto, + indicateur = valeur, + pourcent = FALSE, + decimales=0, + max_size = 15, + suffixe = "hectares", + interactive = FALSE, + titre = glue::glue("Espaces artificialisé par communes en Pays de la Loire en {millesime_ocsge}"), + bas_de_page = glue::glue("Source : OCSGE {millesime_ocsge}") + ) return(carte_1_3) -- GitLab From 0d7acd9346204ca9aa366bacba28b3dd50860dd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Theuliere?= <mael.theuliere@developpement-durable.gouv.fr> Date: Thu, 15 Apr 2021 14:54:44 +0200 Subject: [PATCH 6/8] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20skeleton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gestion du theme_set unique - modification du theme pour la carte --- .../templates/publication/skeleton/header.html | 9 --------- .../publication/skeleton/skeleton.Rmd | 18 +++++++++++------- 2 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 inst/rmarkdown/templates/publication/skeleton/header.html diff --git a/inst/rmarkdown/templates/publication/skeleton/header.html b/inst/rmarkdown/templates/publication/skeleton/header.html deleted file mode 100644 index 4c300d4..0000000 --- a/inst/rmarkdown/templates/publication/skeleton/header.html +++ /dev/null @@ -1,9 +0,0 @@ -<div class="row"> - -<div class="col-md-4"> -<a> -<img src="www/52-pays-de-la-loire-RVB.png" width="215px"> -</a> -</div> - -</div> diff --git a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd index f366fe7..7b94403 100644 --- a/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd +++ b/inst/rmarkdown/templates/publication/skeleton/skeleton.Rmd @@ -17,6 +17,8 @@ title: "L'artificialisation des sols en Pays de la loire en `r params$millesime_ knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, error = FALSE) library(gouvdown) library(propre.artificialisation) +ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + + ggplot2::theme(plot.caption.position = "plot")) ``` texte d'introduction... @@ -26,25 +28,27 @@ texte d'introduction... texte...... ```{r diag barres taux artificialisation par region} -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) + creer_graphe_1_1( params$millesime_teruti) ``` texte...... -```{r carte communale artificialisation en volume} -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) +```{r carte communale artificialisation en volume, fig.width=9,fig.height=7} +ggplot2::theme_set(ggplot2::theme_minimal() + + ggplot2::theme(plot.caption.position = "plot", + plot.title.position = "plot", + text = ggplot2::element_text(family = "Mariane"), + plot.title = ggplot2::element_text(size = 14), + legend.key = ggplot2::element_rect(colour = "white"))) creer_carte_1_3( params$millesime_ocsge) ``` texte...... ```{r graph part surfaces artificialisees} -ggplot2::theme_set(gouvdown::theme_gouv(plot_title_size = 14, subtitle_size = 12, base_size = 10, caption_size = 10) + - ggplot2::theme(plot.caption.position = "plot")) + creer_graphe_1_5( params$millesime_teruti) ``` -- GitLab From e2093d4c622b7212395be37c1a3a8e345fa1d7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Theuliere?= <mael.theuliere@developpement-durable.gouv.fr> Date: Thu, 15 Apr 2021 15:05:44 +0200 Subject: [PATCH 7/8] fix bug desc --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index ed1fb81..ccd0bcc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -43,7 +43,7 @@ Suggests: VignetteBuilder: knitr Remotes: - gitlab::dreal-datalab/mapfactory + gitlab::dreal-datalab/mapfactory, maeltheuliere/COGiter, pachevalier/tricky, spyrales/gouvdown -- GitLab From e7617b0417731d39e57f68770f467cc2e8ecc247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Theuliere?= <mael.theuliere@developpement-durable.gouv.fr> Date: Thu, 15 Apr 2021 15:21:11 +0200 Subject: [PATCH 8/8] typo accents --- R/creer_carte_1_3.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/creer_carte_1_3.R b/R/creer_carte_1_3.R index afeb214..5a345ba 100644 --- a/R/creer_carte_1_3.R +++ b/R/creer_carte_1_3.R @@ -32,7 +32,7 @@ creer_carte_1_3 <- function(millesime_ocsge){ max_size = 15, suffixe = "hectares", interactive = FALSE, - titre = glue::glue("Espaces artificialisé par communes en Pays de la Loire en {millesime_ocsge}"), + titre = glue::glue("Espaces artificialis\u00e9 par communes en Pays de la Loire en {millesime_ocsge}"), bas_de_page = glue::glue("Source : OCSGE {millesime_ocsge}") ) -- GitLab