Réaliser une carte avec R (3)

Dans la première et la deuxième partie du tutoriel nous avons vu comment réaliser des cartes de qualité et comment mettre en valeur des régions. Nous allons à présent voir comment cartographier des données quantitatives par région.

Vous pouvez télécharger le code source complet du notebook R de ce tutoriel ici et le fichier contenant uniquement le code R ici. Vous aurez aussi besoin du fichier csv utilisé dans l’exemple.

Colorier chaque région avec une couleur différente

Avec l’option region de la fonction fortify(), on peut conserver l’information de préfecture par exemple, qui se retrouve alors dans une colonne id de la table de données.

require(maptools)
require(rgdal)
require(ggplot2)
jpn1 <- readOGR(dsn = path.expand("~/repos/cartes/jpn/adm/jpn"), layer = "JPN_adm1") 
## OGR data source with driver: ESRI Shapefile 
## Source: "/home/tpellard/repos/cartes/jpn/adm/jpn", layer: "JPN_adm1"
## with 47 features
## It has 9 fields
jpn1F <- fortify(jpn1, region = "NAME_1")
unique(jpn1F$id)
##  [1] "Aichi"     "Akita"     "Aomori"    "Chiba"     "Ehime"    
##  [6] "Fukui"     "Fukuoka"   "Fukushima" "Gifu"      "Gunma"    
## [11] "Hiroshima" "Hokkaido"  "Hyogo"     "Ibaraki"   "Ishikawa" 
## [16] "Iwate"     "Kagawa"    "Kagoshima" "Kanagawa"  "Kochi"    
## [21] "Kumamoto"  "Kyoto"     "Mie"       "Miyagi"    "Miyazaki" 
## [26] "Nagano"    "Naoasaki"  "Nara"      "Niigata"   "Oita"     
## [31] "Okayama"   "Okinawa"   "Osaka"     "Saga"      "Saitama"  
## [36] "Shiga"     "Shimane"   "Shizuoka"  "Tochigi"   "Tokushima"
## [41] "Tokyo"     "Tottori"   "Toyama"    "Wakayama"  "Yamagata" 
## [46] "Yamaguchi" "Yamanashi"

Ensuite il est facile de colorier chaque préfecture sur la carte d’Asie vue précédemment. Il suffit à l’intérieur d’une spécification aes() d’utiliser l’option fill, en indiquant que la variable à associer à la couleur de remplissage est id, c’est-à-dire la préfecture.

require(mapdata)
require(ggplot2)
xlims <- c(110,150)
ylims <- c(20,50)
asiaMap <- ggplot() +
  borders("worldHires", fill = "gray", colour = "black", xlim = xlims, ylim = ylims, size = .25) +
  geom_polygon(data = jpn1F, aes(x = long, y = lat, group = group, fill = id), color = NA, alpha = .45) +
  coord_quickmap(xlim = xlims, ylim = ylims) +
  theme_classic() + theme(legend.position="none")
asiaMap

Cartographier des données quantitatives

Nous sommes désormais en mesure de réaliser des cartes analytiques qui cartographient des données quantitatives par préfecture.

Prennons par exemple la durée moyenne du VOT des occlusives en position initiale (Takada 2011: 80−81, Tab. 3-5). Il suffit de préparer un fichier .csv avec en colonnes le nom de la préfecture et la valeur moyenne (certaines préfectures ont été exclues de l’étude de Takada 2011 et ont donc une valeur NA), en prennant soin que les noms des préfectures soient identiques à ceux de jpn1F. On peut le vérifier en comparant les deux vecteurs de noms de préfectures.

vot <- read.csv("vot.csv", stringsAsFactors = FALSE)
head(vot)
##          id   vot
## 1  Hokkaido -23.3
## 2     Akita  14.2
## 3    Aomori  12.1
## 4 Fukushima   1.2
## 5     Iwate  -6.3
## 6    Miyagi   0.7
sort(unique(vot$id)) == sort(unique(jpn1F$id))
##  [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [12]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [23]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [34]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [45]  TRUE  TRUE  TRUE

On remarque une erreur dans les noms de préfectures de jpn1F: «Nagasaki» apparaît comme «Naoasaki». Pas de panique, il suffit de le corriger.

sort(unique(jpn1F$id))[27]
## [1] "Naoasaki"
jpn1F$id <- gsub("Naoasaki", "Nagasaki", jpn1F$id)
sort(unique(jpn1F$id))[27]
## [1] "Nagasaki"
sort(unique(vot$id)) == sort(unique(jpn1F$id))
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [43] TRUE TRUE TRUE TRUE TRUE

Tout est désormais prêt pour réaliser notre carte. Pour plus de clarté, il vaut mieux supprimer le contexte asiatique et limiter la carte au Japon uniquement. On mémorise la carte dans une variable. La nouveauté est la fonction geom_map() qui va nous permettre d’associer nos valeurs de VOT aux polygones de la carte.

votmap <- ggplot() +
  geom_polygon(data = jpn1F, aes(x = long, y = lat, group = group), color = NA, fill = NA) +
  geom_map(data = vot, aes(map_id = id, fill = vot), map = jpn1F) +
  coord_quickmap() +
  theme_classic()
votmap

On peut améliorer cette carte en:

  • réduisant l’étendue en enlevant les zones où de toute façon on ne voit pas grand chose (Okinawa) avec xlim()et ylim()
  • utilisant une palette divergente de ColorBrewer
votmap + xlim(c(128,146)) + ylim(c(30,max(jpn1F$lat))) +
  scale_fill_distiller(type = "div", palette = 7)

Références

Takada, Mieko (高田三枝子). 2011. Nihongo no gotō heisaon no kenkyū: VOT no kyōjiteki bunpu to tsūjiteki henka (日本語の語頭閉鎖音の研究:VOTの共時的分布と歴史的変化). Tokyo: Kuroshio shuppan.

À suivre dans la quatrième partie.

Ce billet peut être cité de la façon suivante: Thomas Pellard, « Réaliser une carte avec R (3) », Cipanglossia, 21 juin 2017, https://cipanglo.hypotheses.org/421.

Une réflexion au sujet de « Réaliser une carte avec R (3) »

  1. Ping : Réaliser une carte avec R (2) | Cipanglossia

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *