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()
etylim()
- 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.
Ping : Réaliser une carte avec R (2) | Cipanglossia