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")

tt<-World %>%
rename(Country_or_Area_Code=iso_a3) %>%
  inner_join(ODD_indicateur311 %>%
              filter(Age_group=="All age ranges or no breakdown by age",
                     Sex=="Both sexes or no breakdown by sex",
                     Type_Zone=="Pays",
                   is.na(Value_type)) %>%
              group_by(Country_or_Area_Code) %>%
              filter(!is.na(Value)) %>%
              filter(Year==max(Year)))

ggplot(data=tt)+
  geom_sf(aes(fill=Value))

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 attribuer à un polygone.

data("World")

tt<-World %>%
rename(Country_or_Area_Code=iso_a3) %>%
  inner_join(ODD_indicateur311 %>%
              filter(Age_group=="All age ranges or no breakdown by age",
                     Sex=="Both sexes or no breakdown by sex",
                     Type_Zone=="Pays",
                   is.na(Value_type)) %>%
              group_by(Country_or_Area_Code) %>%
              filter(!is.na(Value)) %>%
              filter(Year==max(Year)))

ggplot(data=tt)+
  geom_sf(fill="grey97")+
  stat_sf_coordinates(aes(size=Value,fill=Value),color = "black",shape=21)+
  scale_fill_gradient2(name = "Valeur",
                       low = "darkblue", mid = "white", high = "darkred")+
  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édement. Par exemple : avec un peu de thème et de facet.

data("World")
World<-st_as_sf(World)

tt<-World %>%
rename(Country_or_Area_Code=iso_a3) %>%
inner_join(ODD_indicateur311 %>%
            filter(Age_group=="All age ranges or no breakdown by age",
                   Sex=="Both sexes or no breakdown by sex",
                   Type_Zone=="Pays",
                   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(colour=F,
         order=0,
         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=T)

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")

tt<-World %>%
rename(Country_or_Area_Code=iso_a3) %>%
  inner_join(ODD_indicateur311 %>%
              filter(Age_group=="All age ranges or no breakdown by age",
                     Sex=="Both sexes or no breakdown by sex",
                     Type_Zone=="Pays",
                   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

data("World")

tt<-World %>%
rename(Country_or_Area_Code=iso_a3) %>%
  inner_join(ODD_indicateur311 %>%
              filter(Age_group=="All age ranges or no breakdown by age",
                     Sex=="Both sexes or no breakdown by sex",
                     Type_Zone=="Pays",
                   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")

13.6 Exercice 5

Produire une carte du Loiret à l’EPCI du taux de logements collectifs dans le parc locatif social.

Résultat attendu