Chapitre 13 Créer des cartes avec ggplot2
13.1 Les cartes choroplèthes
Une fonction géométrique de ggplot2 permet l’utilisation de données géomatiques : geom_sf()
L’exemple suivant est une carte choroplèthe.
data("World")
<- World %>%
tt rename(Country_or_Area_Code = iso_a3) %>%
inner_join(
%>%
ODD_indicateur311 filter(Age_group == "All age ranges or no breakdown by age",
== "Both sexes or no breakdown by sex",
Sex == "Pays",
Type_Zone is.na(Value_type)) %>%
group_by(Country_or_Area_Code) %>%
filter(!is.na(Value)) %>%
filter(Year == max(Year)),
by = "Country_or_Area_Code")
ggplot(data = tt) +
geom_sf(aes(fill = Value)) +
theme_gouv_map() +
scale_fill_gouv_continuous(palette = "pal_gouv_h", reverse = TRUE)
13.2 Les cartes à ronds proportionnels
La fonction stat_sf_coordinates() permet d’extraire les coordonnées d’un objet ‘sf’. Ainsi un rond proportionnel peut être attribué à un polygone.
data("World")
<- World %>%
tt rename(Country_or_Area_Code = iso_a3) %>%
inner_join(ODD_indicateur311 %>%
filter(Age_group == "All age ranges or no breakdown by age",
== "Both sexes or no breakdown by sex",
Sex == "Pays",
Type_Zone is.na(Value_type)) %>%
group_by(Country_or_Area_Code) %>%
filter(!is.na(Value)) %>%
filter(Year == max(Year)))
ggplot(data = tt) +
geom_sf(fill = gouv_colors("r5")) +
theme_gouv_map() +
stat_sf_coordinates(aes(size = Value, fill = Value), color = "black", shape = 21) +
scale_fill_gradient(name = "Valeur", low = "white", high = gouv_colors("i1")) +
scale_size_area(name = "Valeur", max_size = 10)
13.3 Les facettes
On peut exploiter de la même façon les différentes fonctions vues précédemment. Par exemple : avec un peu de thème et de facet.
data("World")
<- World %>%
tt st_transform(4326) %>%
rename(Country_or_Area_Code = iso_a3) %>%
inner_join(ODD_indicateur311 %>%
filter(Age_group == "All age ranges or no breakdown by age",
== "Both sexes or no breakdown by sex",
Sex == "Pays",
Type_Zone is.na(Value_type)) %>%
group_by(Country_or_Area_Code) %>%
filter(!is.na(Value)) %>%
filter(Year %in% c(1990, 2000, 2010, 2015)) %>%
ungroup() %>%
complete(Year)
)
ggplot(data = tt) +
geom_sf(aes(fill = log(Value))) +
theme_minimal() +
scale_fill_viridis(option = "magma",
direction = 1,
breaks = c(0, 1, 2, 3, 4, 5, 6, 7)) +
guides(
fill = guide_legend(direction = "horizontal",
keyheight = unit(2, units = "mm"),
keywidth = unit(20, units = "mm"),
order = 1,
title.position = "top",
title.hjust = 0.5,
nrow = 1,
label.position = "bottom",
label.hjust = 1)) +
theme(legend.position = "bottom") +
labs(fill = "Log du taux de mortalité infantile") +
facet_wrap("Year", drop = TRUE)
13.4 Ajouter une barre d’échelle et la flèche du nord
Le package ggspatial
permet d’enrichir simplement nos cartes ggplot2
avec une barre d’échelle et la flèche du nord.
Les deux fonctions qui permettent cela sont annotation_scale()
et annotation_north_arrow()
.
L’utilisation de ces fonctions nécessitent un système de coordonnées géographiques.
data("World")
<- World %>%
tt rename(Country_or_Area_Code = iso_a3) %>%
inner_join(ODD_indicateur311 %>%
filter(Age_group == "All age ranges or no breakdown by age",
== "Both sexes or no breakdown by sex",
Sex == "Pays",
Type_Zone is.na(Value_type)) %>%
group_by(Country_or_Area_Code) %>%
filter(!is.na(Value)) %>%
filter(Year == max(Year)))
ggplot(data = tt %>% filter(continent == "Africa")) +
geom_sf(aes(fill = Value)) +
annotation_scale(location = "br", line_width = .5) +
annotation_north_arrow(location = "bl", height = unit(0.7, "cm"), width = unit(0.7, "cm"))
13.5 Ajouter des étiquettes et du texte
Les 2 fonctions geom_sf_text() et geom_sf_label() permettent respectivement d’afficher du texte et des étiquettes sur des objets de types sf
geom_sf_text
:
data("World")
<- World %>%
tt rename(Country_or_Area_Code = iso_a3) %>%
inner_join(ODD_indicateur311 %>%
filter(Age_group == "All age ranges or no breakdown by age",
== "Both sexes or no breakdown by sex",
Sex == "Pays",
Type_Zone is.na(Value_type)) %>%
group_by(Country_or_Area_Code) %>%
filter(!is.na(Value)) %>%
filter(Year == max(Year)))
ggplot(data = tt %>% filter(continent == "Africa")) +
geom_sf(aes(fill = Value)) +
geom_sf_text(aes(label = name), vjust = -0.5, check_overlap = TRUE, fontface = "italic", colour = "white")
geom_sf_label
ggplot(data = tt %>% filter(continent == "Africa")) +
geom_sf(aes(fill = Value)) +
geom_sf_label(aes(label = name))
13.6 Exercice 5
A partir des jeux de données rpls_aggrege.RData et Carte_EPCI_France.RData, produire une carte du Loiret à l’EPCI représentant le taux de logements collectifs dans le parc locatif social (variable “Logements collectifs_pourcent”).
Résultat attendu :
Note : A partir du fond de carte Carte_EPCI_FRANCE
.