Cet article fournit de nombreux exemples pour la création d’une carte avec ggplot. Vous apprendrez également comment créer une carte choroplèthe, dans laquelle les zones sont structurées proportionnellement aux valeurs d’une variables donnée affichée sur la carte, telles que l’espérance de vie ou la densité de population.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RPrérequis
Fonctions et packages R clés:
- map_data() [dans ggplot2] pour récupérer les données cartographiques. Nécessite le package
maps
. - geom_polygon() [dans ggplot2] pour créer la carte
Nous utiliserons le package viridis
pour définir la palette de couleurs de la carte choroplèthe.
Charger les packages requis et définir le thème par défaut:
library(ggplot2)
library(dplyr)
require(maps)
require(viridis)
theme_set(
theme_void()
)
Créer une carte simple
Carte du monde
Récupérer les données de la carte du monde:
world_map <- map_data("world")
ggplot(world_map, aes(x = long, y = lat, group = group)) +
geom_polygon(fill="lightgray", colour = "white")
Carte des régions spécifiques
- Récupérer des données cartographiques pour une ou plusieurs régions spécifiques:
# Quelques pays de l'UE
some.eu.countries <- c(
"Portugal", "Spain", "France", "Switzerland", "Germany",
"Austria", "Belgium", "UK", "Netherlands",
"Denmark", "Poland", "Italy",
"Croatia", "Slovenia", "Hungary", "Slovakia",
"Czech republic"
)
# Récupérer les données cartographiques
some.eu.maps <- map_data("world", region = some.eu.countries)
# Calculer le centroïde comme étant la longitude et la lattitude moyennes
# Utilisé comme coordonnée pour les noms de pays
region.lab.data <- some.eu.maps %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
- Visualiser
ggplot(some.eu.maps, aes(x = long, y = lat)) +
geom_polygon(aes( group = group, fill = region))+
geom_text(aes(label = region), data = region.lab.data, size = 3, hjust = 0.5)+
scale_fill_viridis_d()+
theme_void()+
theme(legend.position = "none")
Faire une carte choroplèthe
Carte du monde colorée par l’espérance de vie
Ici, nous allons créer une carte du monde colorée en fonction de la valeur de l’espérance de vie à la naissance en 2015. Les données sont extraites de la base de données de l’OMS (Organisation mondiale de la santé) à l’aide du [package R WHO] (https://cran.r-project.org/web/packages/WHO/vignettes/who_vignette.html).
- Récupérer les données sur l’espérance de vie et préparer les données:
life.exp <- readr::read_tsv("data/life.expectancy.who2015.txt")
- Fusionner la carte et les données sur l’espérance de vie:
world_map <- map_data("world")
life.exp.map <- left_join(life.exp, world_map, by = "region")
- Créer la carte choroplèthe. Notez qu’il manque des données pour certaines régions sur la carte ci-dessous:
- Utilisez la fonction
geom_polygon()
:
ggplot(life.exp.map, aes(long, lat, group = group))+
geom_polygon(aes(fill = lifeExp ), color = "white")+
scale_fill_viridis_c(option = "C")
- Ou utilisez la fonction
geom_map()
:
ggplot(life.exp.map, aes(map_id = region, fill = lifeExp))+
geom_map(map = life.exp.map, color = "white")+
expand_limits(x = life.exp.map$long, y = life.exp.map$lat)+
scale_fill_viridis_c(option = "C")
Carte des États-Unis colorée par les taux de crimes violents
Jeu de données de démonstration : USArrests (Taux de crimes violents par État américain, en 1973).
# Préparer les données USArrests
library(dplyr)
arrests <- USArrests
arrests$region <- tolower(rownames(USArrests))
head(arrests)
## Murder Assault UrbanPop Rape region
## Alabama 13.2 236 58 21.2 alabama
## Alaska 10.0 263 48 44.5 alaska
## Arizona 8.1 294 80 31.0 arizona
## Arkansas 8.8 190 50 19.5 arkansas
## California 9.0 276 91 40.6 california
## Colorado 7.9 204 78 38.7 colorado
# Récupérer les données cartographiques des états et les fusionner avec les données sur la criminalité
states_map <- map_data("state")
arrests_map <- left_join(states_map, arrests, by = "region")
# Créer la carte
ggplot(arrests_map, aes(long, lat, group = group))+
geom_polygon(aes(fill = Assault), color = "white")+
scale_fill_viridis_c(option = "C")
Version: English
No Comments