Espaces verts

Données - Ville de Paris

Code
source(here::here("_rinit.R"))
source(here::here("data", "paris", "_paris.R"))   # wkb2sfc(), paris_basemap(), arrondissements_sf()
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/paris; /usr/local/bin/R -e 'quarto::quarto_render("espaces_verts.qmd")'

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                      fig.width = 8, fig.height = 5, dpi = 150)

ev_path <- here::here("data", "paris", "espaces_verts.parquet")
ev <- arrow::read_parquet(ev_path) |>
  dplyr::mutate(
    ha = surface_totale_reelle / 1e4,
    ar = suppressWarnings(as.integer(substr(adresse_codepostal, 4, 5)))
  )

n_tot     <- nrow(ev)
total_ha  <- sum(ev$ha, na.rm = TRUE)
arr_sf    <- arrondissements_sf()

# Un point par espace vert, hors le seul enregistrement sans géométrie
pts_sf <- ev |>
  dplyr::filter(lengths(geom_x_y) > 0) |>
  dplyr::mutate(geometry = wkb2sfc(geom_x_y)) |>
  sf::st_as_sf(crs = 4326)

theme_carte <- theme_void(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        plot.margin = margin(5, 12, 5, 5))
theme_barres <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        panel.grid.major.y = element_blank())

L’inventaire complet des espaces verts de la Ville de Paris — du grand parc au simple mur végétalisé ou à la jardinière de rue. 2 534 entités, pour 1 024 hectares au total (à comparer aux 25,4 ha supplémentaires livrés depuis 2020 — soit environ +2,5 % du patrimoine existant).

Code
ev |>
  dplyr::arrange(dplyr::desc(surface_totale_reelle)) |>
  dplyr::transmute(Nom = nom_ev, Type = type_ev, Arrondissement = ar, `Surface (ha)` = round(ha, 1)) |>
  head(8) |>
  gt::gt() |>
  gt::sub_missing(missing_text = "—") |>
  gt::tab_header(title = "8 plus grands espaces verts") |>
  gt::tab_options(table.width = "100%")
8 plus grands espaces verts
Nom Type Arrondissement Surface (ha)
CIMETIERE PARISIEN DE PANTIN Cimetières 0 107.6
CIMETIERE PARISIEN DE THIAIS Cimetières 20 103.4
CIMETIERE PARISIEN DE BAGNEUX Cimetières 20 61.5
CIMETIERE DE L'EST PARISIEN DIT DU PERE LACHAISE Cimetières 20 43.2
PARC FLORAL DE PARIS Promenades ouvertes 12 37.2
CIMETIERE PARISIEN D'IVRY Cimetières 0 28.4
CIMETIERE PARISIEN DE SAINT-OUEN Cimetières 0 27.1
PARC DES BUTTES CHAUMONT Promenades ouvertes 19 24.7

Où sont-ils

Code
# Les vraies "destinations" vertes -- pas les jardinières, murs végétalisés
# ou décorations de voirie, trop nombreux pour une carte de points lisible.
espaces_notables <- c("Promenades ouvertes", "Cimetières", "Bois",
                      "Jardins privatifs", "Etablissements sportifs")
pts_notables <- dplyr::filter(pts_sf, type_ev %in% espaces_notables)

pal <- leaflet::colorFactor("Dark2", domain = espaces_notables)

leaflet::leaflet(pts_notables, options = leaflet::leafletOptions(minZoom = 11)) |>
  paris_basemap() |>
  leaflet::addPolygons(data = arr_sf, fill = FALSE, color = "#999", weight = 1) |>
  leaflet::addCircleMarkers(
    radius = ~pmax(3, pmin(16, sqrt(ha) * 3)), stroke = FALSE,
    fillOpacity = 0.75, fillColor = ~pal(type_ev),
    label = ~sprintf("%s — %.1f ha", nom_ev, ha),
    popup = ~sprintf("<b>%s</b><br>%s<br>%.1f ha", nom_ev, type_ev, ha)
  ) |>
  leaflet::addLegend("bottomright", pal = pal, values = ~type_ev, title = "Type", opacity = 0.9)

Parcs, jardins, bois, cimetières et établissements sportifs seulement (652 sur 2534) — rayon des cercles ∝ √(surface).

Surface par arrondissement

Code
cnt <- ev |> dplyr::filter(!is.na(ar)) |> dplyr::group_by(ar) |>
  dplyr::summarise(ha = sum(ha, na.rm = TRUE), .groups = "drop")

arr_sf |>
  dplyr::left_join(cnt, by = c("c_ar" = "ar")) |>
  ggplot() +
  geom_sf(aes(fill = ha), colour = "white", linewidth = 0.2) +
  scale_fill_viridis_c(option = "viridis", direction = -1, na.value = "grey92", name = "Hectares",
                       trans = "sqrt") +
  labs(title = "Surface d'espaces verts par arrondissement",
       subtitle = "16ᵉ (bois de Boulogne) et 12ᵉ (bois de Vincennes) dominent très largement") +
  theme_carte

Beaucoup d’entités, peu de surface

Code
ev |>
  dplyr::count(type_ev, sort = TRUE) |>
  dplyr::filter(!is.na(type_ev)) |>
  dplyr::mutate(type_ev = forcats::fct_reorder(type_ev, n)) |>
  ggplot(aes(n, type_ev)) +
  geom_col(fill = "#3b6f8a", width = 0.65) +
  geom_text(aes(label = n), hjust = -0.2, size = 3) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Nombre d'entités par type", x = NULL, y = NULL) +
  theme_barres

Code
ev |>
  dplyr::filter(!is.na(type_ev)) |>
  dplyr::group_by(type_ev) |>
  dplyr::summarise(ha = sum(ha, na.rm = TRUE), .groups = "drop") |>
  dplyr::mutate(type_ev = forcats::fct_reorder(type_ev, ha)) |>
  ggplot(aes(ha, type_ev)) +
  geom_col(fill = "#2f6f4f", width = 0.65) +
  geom_text(aes(label = scales::number(ha, 1)), hjust = -0.2, size = 3) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.12))) +
  labs(title = "Surface (ha) par type",
       subtitle = "Promenades + cimetières : 94 % de la surface, 24 % des entités",
       x = NULL, y = NULL) +
  theme_barres

« Bois » n’apparaît qu’à 0 ha : les deux bois parisiens (Boulogne, Vincennes, ~1 800 ha à eux deux) sont gérés par un système forestier séparé, sans surface calculée dans cette table — ce n’est pas une absence réelle.

Source & données

Code
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "[Espaces verts](https://opendata.paris.fr/explore/dataset/espaces_verts/information/)",
    "Direction des Espaces Verts et de l'Environnement (DEVE) — Ville de Paris",
    "Open Database License (ODbL)",
    sprintf("`data/paris/espaces_verts.parquet` (%s ko) + `arrondissements.parquet`",
            round(file.size(ev_path) / 1024)),
    format(as.Date(file.mtime(ev_path)), "%d %B %Y"),
    sprintf("%s entités, %s ha", format(n_tot, big.mark = " "), scales::number(total_ha, 1))
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Espaces verts
Producteur Direction des Espaces Verts et de l’Environnement (DEVE) — Ville de Paris
Licence Open Database License (ODbL)
Fichier data/paris/espaces_verts.parquet (3821 ko) + arrondissements.parquet
Mise à jour 05 septembre 2026
Observations 2 534 entités, 1 024 ha