Carte par Points (Dot Density Map) de la Population par bailliage en 1793

Ce notebook génère une carte par points pour visualiser la répartition de la population connue des bailliages en 1793, en utilisant les packages sf, dplyr, et ggplot2.


library(sf)
library(dplyr)
library(ggplot2)

1. Préparation des données

# Chargement des shapefiles
paroisses <- st_read("C:/Users/Najla Touati/Dropbox/temporaire/obardi_R/data/bailliages/COMMUNES_1789_BRETTE_polyg.shp")
## Reading layer `COMMUNES_1789_BRETTE_polyg' from data source 
##   `C:\Users\Najla Touati\Dropbox\temporaire\obardi_R\data\bailliages\COMMUNES_1789_BRETTE_polyg.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 33965 features and 15 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 99040 ymin: 6046546 xmax: 1242444 ymax: 7110479
## Projected CRS: RGF93 Lambert 93
bailliage <- st_read("C:/Users/Najla Touati/Dropbox/temporaire/obardi_R/data/bailliages/BAILLIAGES_1789_BRETTE_polyg.shp")
## Reading layer `BAILLIAGES_1789_BRETTE_polyg' from data source 
##   `C:\Users\Najla Touati\Dropbox\temporaire\obardi_R\data\bailliages\BAILLIAGES_1789_BRETTE_polyg.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 435 features and 22 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 99040 ymin: 6046546 xmax: 1242444 ymax: 7110479
## Projected CRS: RGF93 Lambert 93

2. Calculs des variables

# === 2. CALCULS DES VARIABLES ===

# Surface totale des paroises en km²
paroisses <-paroisses %>%
  mutate(
    surface_km2 = as.numeric(st_area(geometry)) / 1000000
  )
# Agrégation des données par bailliage
bailliage <- paroisses %>%
  group_by(X.bailliage) %>%
  summarise(
    surface_totale_km2 = sum(surface_km2, na.rm = TRUE),
    surface_avec_pop_km2 = sum(surface_km2[!is.na(j_P1793pop)], na.rm = TRUE),
    surface_sans_pop_km2 = sum(surface_km2[is.na(j_P1793pop)], na.rm = TRUE),
    population_connue = sum(j_P1793pop, na.rm = TRUE)
  ) %>%
  mutate(
    densite_hab_km2 = population_connue / surface_avec_pop_km2,
    coefficient_incertitude_pct = 100 * surface_sans_pop_km2 / surface_totale_km2
  )

La population connue est la somme des populations disponibles et connues d’après les sources.

3. Carte par points (dot density map)

3.1 Calcul pour qu’un point = 10 habitants

# Préparer les données
bailliage_dots <- bailliage %>%
  filter(!is.na(population_connue) & population_connue > 0) %>%
  mutate(nb_points = round(population_connue / 10, 0))

# Générer les points aléatoirement dans chaque bailliage
dots <- st_sample(bailliage_dots, bailliage_dots$nb_points, 
                  type = "random", exact = TRUE)

# Créer des cercles autour des points (ajuster le radius selon projection)
circles <- st_buffer(dots, dist = 1000)  # 1000 mètres = 1 km
# Convertir pour ggplot2
dots_sf    <- st_as_sf(dots)
circles_sf <- st_as_sf(circles)

3.2 Conception cartographique

# === CARTE ggplot2 ===

map_dot <- ggplot() +
  geom_sf(data = bailliage, 
          fill = "grey95", color = "grey70", linewidth = 0.2) +
  
  geom_sf(data = circles_sf, 
          fill = "#283445", color = "#283445", linewidth = 0.05) +
  
  labs(title = "Point cartogram of the population by bailliage in 1793") +
  
  annotate("text",
           x = st_bbox(bailliage)[1] + (st_bbox(bailliage)[3]-st_bbox(bailliage)[1])*0.01,
           y = st_bbox(bailliage)[2] + (st_bbox(bailliage)[4]-st_bbox(bailliage)[2])*0.08,
           label = "1 point = 10 inhabitants",
           hjust = 0, size = 4.5, fontface = "bold", color = "#283445") +
  
  annotate("text",
           x = st_bbox(bailliage)[1] + (st_bbox(bailliage)[3]-st_bbox(bailliage)[1])*0.01,
           y = st_bbox(bailliage)[2] + (st_bbox(bailliage)[4]-st_bbox(bailliage)[2])*0.04,
           label = "Source : []",
           hjust = 0, size = 3.7, color = "grey30") +
  
  annotate("text",
           x = st_bbox(bailliage)[1] + (st_bbox(bailliage)[3]-st_bbox(bailliage)[1])*0.01,
           y = st_bbox(bailliage)[2] + (st_bbox(bailliage)[4]-st_bbox(bailliage)[2])*0.01,
           label = "Conception : N. Touati, 2025",
           hjust = 0, size = 3.7, color = "grey30") +
  
  theme_minimal() +
  theme(
    plot.title = element_text(size = 18, face = "bold"),
    axis.title = element_blank(),
    axis.text  = element_blank(),
    panel.grid = element_blank()
  )
map_dot

### 3.3 xport de la carte en png

# === EXPORT PNG ===
ggsave("C:/Users/Najla Touati/Dropbox/Najla - ObARDI/scriptR/carte_dots_bailliage_1793.png",
       plot = map_dot, width = 2000/200, height = 1500/200, dpi = 300)