diff --git a/R/creer_graphique_series_temporelles_prix.R b/R/creer_graphique_series_temporelles_prix.R index 4246990308ff78d2d6d0f7ccbce0c6c6e91fdbf5..f1873cdae488d4a7897d2b37d0f0e81a636b96d1 100644 --- a/R/creer_graphique_series_temporelles_prix.R +++ b/R/creer_graphique_series_temporelles_prix.R @@ -1,8 +1,8 @@ #' graphique sur l'évolution du prix de vente des biens. #' #' @param data Le dataframe. -#' @param type_logement Appartements ou Maisons. -#' @param type_indicateur Cumul annuel ou valeur trimestrielle. +#' @param type_logement "Logements", "Appartements" ou "Maisons". +#' @param type_indicateur "Cumul annuel" ou "valeur trimestrielle". #' @param type_zone Liste des types de zonage à intégrer dans la facette. #' @param titre Le titre du graphique. #' @param bas_de_page Le bas de page du graphique. @@ -11,7 +11,7 @@ #' #' @return Un graphique ggplot2. #' @export -#' @importFrom dplyr filter mutate group_by summarise select case_when +#' @importFrom dplyr filter mutate group_by summarise select case_when arrange #' @importFrom forcats fct_drop #' @importFrom ggplot2 ggplot aes geom_line geom_point theme scale_x_date scale_y_continuous labs facet_wrap element_line geom_text #' @importFrom scales dollar_format @@ -25,42 +25,40 @@ creer_graphique_series_temporelles_prix <- function(data = indic_ecln, bas_de_page = "", type_facet = "classique", ncol_facet = 3) { - indic <- c("PrixM2 - Logements") - if (type_logement == "Maisons") { - indic <- c("PrixM2 - Maisons") - } - if (type_logement == "Appartements") { - indic <- c("PrixM2 - Appartements") - } + indic <- paste0("PrixM2 - ", type_logement) + data_prep <- data %>% + # mutate(Valeur = case_when( + # CodeZone %in% c("53", "72") ~ NA_real_, + # year(Periode) %in% c(2018, 2019) & CodeZone == "49" ~ NA_real_, + # TRUE ~ Valeur)) %>% dplyr::filter( + # .data$Periode >= (max(.data$Periode) - months(42)), .data$Indicateur %in% indic, .data$TypeIndicateur == type_indicateur, .data$TypeZone %in% type_zone ) %>% + # COGiter::filtrer_cog(reg = "52", garder_supra = ">") %>% dplyr::mutate( Zone = forcats::fct_drop(.data$Zone), Indicateur = stringr::str_split_fixed(.data$Indicateur, " - ", 2)[, 1] ) + ymoy <- 0.5 * (min(data_prep$Valeur, na.rm = TRUE) + max(data_prep$Valeur, na.rm = TRUE) ) + # creation des annotations pour zonages avec aucune donnée annotations <- data_prep %>% + dplyr::arrange(.data$Zone, .data$Periode) %>% + dplyr::filter(is.na(.data$Valeur) | (is.na(dplyr::lead(.data$Valeur)) & .data$Periode != max(.data$Periode))) %>% dplyr::group_by(.data$Zone) %>% - dplyr::summarise(som_valeur = sum(.data$Valeur,na.rm=TRUE)) %>% - # dplyr::mutate(Zone= as.character(.data$Zone)) %>% - dplyr::mutate( - x = mean(range(data_prep$Periode)), - y = 4000, - Indicateur = "xx") %>% - dplyr::mutate(mon_texte = dplyr::case_when( - som_valeur == 0 ~ "Donn\u00e9es\nnon disponibles\nen raison\ndu secret\nstatistique", - TRUE ~ "" - )) %>% - dplyr::mutate(color_axe_y = dplyr::case_when( - som_valeur == 0 ~ "red", - TRUE ~ "black" - )) %>% - dplyr::select(-som_valeur) + # Envisager un groupement différent pour gérer la discontinuité des période sans données ? + dplyr::summarise(x1 = min(Periode, na.rm = TRUE) + days(30), + x2 = max(Periode, na.rm = TRUE), + y = dplyr::coalesce(dplyr::first(Valeur, na_rm = TRUE), ymoy), + Indicateur = "message") %>% + dplyr::mutate(mon_texte = dplyr::if_else(y != ymoy, "Secret\nstatistique", + "Donn\u00e9es\nnon disponibles\nen raison\ndu secret\nstatistique")) + p <- ggplot2::ggplot( data_prep, @@ -82,7 +80,8 @@ creer_graphique_series_temporelles_prix <- function(data = indic_ecln, axis.text.x = element_text(size=11, hjust=-0.1), axis.line = element_line(size = 0.5, linetype = "solid")) + ggplot2::scale_x_date(date_labels = "%y", expand = c(0, 0), date_breaks = "1 year") + - ggplot2::scale_y_continuous(labels = scales::dollar_format(big.mark = " ", decimal_mark = ",", prefix = "", suffix = " \u20ac",accuracy = 1)) + + ggplot2::scale_y_continuous(labels = scales::dollar_format(big.mark = " ", decimal_mark = ",", + prefix = "", suffix = " \u20ac",accuracy = 1)) + gouvdown::scale_color_gouv_discrete(palette = "pal_gouv_fr") + ggplot2::labs( title = titre, @@ -98,22 +97,18 @@ creer_graphique_series_temporelles_prix <- function(data = indic_ecln, if (nlevels(data_prep$Zone) > 1) { if (type_facet == "classique") { p <- p + - ggplot2::facet_wrap(~ .data$Zone, scales = "free", ncol = ncol_facet) + ggplot2::facet_wrap(~ .data$Zone, scales = "fixed", ncol = ncol_facet) } if (type_facet == "grille") { p <- p + - geofacet::facet_geo(~Zone, grid = mygrid, scales = "free", drop = TRUE) + geofacet::facet_geo(~Zone, grid = mygrid, scales = "fixed", drop = TRUE) } } - p <- p + - ggplot2::geom_text(data = annotations, - ggplot2::aes(x = x, - y = y, - label = mon_texte), - color = "blue", - size = 4) + + p + ggplot2::geom_text(data = annotations, ggplot2::aes(x = x1, y = y, label = mon_texte), + color = "blue", size = 3, hjust = "left", ) # ggplot2::scale_y_continuous(labels = scales::dollar_format(big.mark = " ", decimal_mark = ",", prefix = "", suffix = " \u20ac"))