6.2 Exercices
Dans cette section, vous mettrez en pratique certains concepts vus dans la section leçon de ce module. Bien que la réponse à chaque question soit disponible, il est très important de tenter d’y répondre par vous-même!
Cette série d’exercices utilise des données comprises avec la bibliothèque tmap. En particulier, vous utiliserez les données World, metro, et land. Charger ces données dans votre session R:
Question 1
a) Quelle est la géométrie des données World, et quels sont leurs attributs?
Réponse
La géométrie est donnée par la fonction st_geometry() de la bibliothèque sf.
Geometry set for 177 features
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 83.64
Geodetic CRS: WGS 84
First 5 geometries:
MULTIPOLYGON (((66.22 37.39, 66.52 37.36, 67.08...
MULTIPOLYGON (((20.61 41.09, 21.02 40.84, 21 40...
MULTIPOLYGON (((-4.923 24.98, -8.684 27.4, -8.6...
MULTIPOLYGON (((12.32 -6.1, 12.73 -5.966, 13.03...
MULTIPOLYGON (((-61.88 -80.39, -61.14 -79.98, -...
Les données World sont donc des multipolygones. Chaque multipolygone correspond à un pays de la planète. Nous pouvons connaître le nom des attributs en utilisant la fonction names()
[1] "iso_a3" "name" "sovereignt"
[4] "continent" "area" "pop_est"
[7] "pop_est_dens" "economy" "income_grp"
[10] "gdp_cap_est" "life_exp" "well_being"
[13] "footprint" "HPI" "inequality"
[16] "gender" "press" "geometry"
Les différents attributs sont des caractéristiques générales des pays comme leur nom (name), leur continent (continent), leur superficie (area), la taille estimée de leur population (pop_est), la densité estimée de leur population (pop_est_dens), l’espérance de vie de leur population (life_exp), etc.
b) Déterminer les dix premières entrées des attributs iso_a3 et name des données World.
Réponse
Simple feature collection with 10 features and 2 fields
Attribute-geometry relationships: identity (2)
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 49.04
Geodetic CRS: WGS 84
iso_a3 name geometry
1 AFG Afghanistan MULTIPOLYGON (((66.22 37.39...
2 ALB Albania MULTIPOLYGON (((20.61 41.09...
3 DZA Algeria MULTIPOLYGON (((-4.923 24.9...
4 AGO Angola MULTIPOLYGON (((12.32 -6.1,...
5 ATA Antarctica MULTIPOLYGON (((-61.88 -80....
6 ARG Argentina MULTIPOLYGON (((-68.63 -52....
7 ARM Armenia MULTIPOLYGON (((46.48 39.46...
8 AUS Australia MULTIPOLYGON (((147.7 -40.8...
9 AUT Austria MULTIPOLYGON (((16.88 48.47...
10 AZE Azerbaijan MULTIPOLYGON (((46.14 38.74...
Nous comprenons ainsi que l’attribut iso_a3 correspond à un code standardisé abrégeant le nom des pays.
c) Utiliser le style gray pour illustrer la carte du monde. N’ajouter pas de légende.
Réponse
tm_shape(World) + tm_polygons(fill = "name",
fill.legend = tm_legend(show = FALSE)) +
tm_style("gray")
Vous devriez voir afficher un message d’erreur quant au nombre de pays dépassant le nombre maximal de couleurs pouvant être illustrées. Ceci a peu de conséquences pour cette carte puisque peu de pays adjacents ont la même couleur et que ceux-ci sont délimités par des bordures noires nous permettant de les distinguer.
d) Produire une carte identique à la carte de la question c mais représentant uniquement les pays d’Afrique.
Réponse
Isoler le continent africain:
Produire une carte de l’Afrique avec le style gray et sans légende.
tm_shape(Afrique) + tm_polygons(fill="name",
fill.legend = tm_legend(show = FALSE)) +
tm_style("gray")
Notez que la bibliothèque tmap permet de minimiser le nombre de polygones adjacents illustrés avec la même couleur. Pour se faire, il s’agit de définir fill = MAP_COLORS en argument à la fonction tm_polygons().
tm_shape(Afrique) + tm_polygons(fill="MAP_COLORS",
fill.legend = tm_legend(show = FALSE)) +
tm_style("gray")
e) Produire une carte de l’Afrique sur laquelle les pays sont identifiés par leur code “iso_a3”.
Réponse
Nous reprenons d’abord la carte de l’Afrique produite en d. Puis, nous ajoutons le code “iso_a3” des pays en utilisant la fonction tm_labels():
tm_shape(Afrique) + tm_polygons(fill="MAP_COLORS",
fill.legend = tm_legend(show = FALSE)) +
tm_style("gray") +
tm_labels(text = "iso_a3", size = 0.6)
f) Produire une carte de l’Amérique du Sud où la couleur de chaque pays représente sa densité de population (“pop_est_dens”). Utiliser le style quantile pour classer les valeurs de densité, et la palette "brewer.reds" de cols4all. Assurez-vous que la légende porte le titre “Densité de population”.
Réponse
Dans un premier temps, nous devons isoler les pays de l’Amérique du Sud.
Nous pouvons maintenant produire la carte en spécifiant la palette directement dans tm_scale_intervals() :
tm_shape(AS) +
tm_polygons(fill = "pop_est_dens",
fill.scale = tm_scale_intervals(style = "quantile", values = "brewer.reds"),
fill.legend = tm_legend(title = "Densité de population"))
g) Produire une carte à panneaux multiples de la densité de population en Amérique du Sud. Votre carte doit comprendre les caractéristiques suivantes:
- Chaque panneau de la carte doit correspondre à un pays identifié par son nom.
- La carte doit comprendre quatre rangées de panneaux.
- Les pays doivent être illustrés avec un facteur d’échelle de cinq.
Réponse
Nous utilisons la fonction tm_facets() pour produire une carte à panneaux multiples:
tm_shape(AS) +
tm_polygons(fill = "pop_est_dens",
fill.scale = tm_scale_intervals(style = "quantile", values = "brewer.reds"),
fill.legend = tm_legend(title = "Densité de population")) +
tm_facets(by = "name",
nrow = 4,
scale.factor = 5
)
h) Utiliser les arguments de la fonction tm_layout() pour modifier l’apparence de la carte à panneaux multiples de la question g. Plus précisément, ajouter les caractéristiques suivantes:
- Une vignette de hauteur 2 pour chaque facette.
- Une couleur de fond blanc pour chaque vignette.
- Un texte de taille 0.9 sur chaque vignette.
- Une légende encadrée et positionnée à l’extérieur à gauche des panneaux.
- Une légende dont les chiffres sont arrondis à l’unité près, et séparés par le symbole “-”.
Réponse
Nous utilisons fill.legend = tm_legend() pour la position et l’encadrement de la légende, et tm_layout() pour les paramètres des vignettes et le format des chiffres.
tm_shape(AS) +
tm_polygons(fill = "pop_est_dens",
fill.scale = tm_scale_intervals(style = "quantile", values = "brewer.reds"),
fill.legend = tm_legend(title = "Densité de population",
position = tm_pos_out("left", "center"),
frame = TRUE)) +
tm_facets(by = "name",
nrow = 4,
scale.factor = 5
) +
tm_layout(panel.label.height = 2,
panel.label.size = 0.9,
panel.label.bg.color = "white",
legend.format = list(format = "f", digits = 0, text.separator = "-"))
Question 2
a) Quelle est la géométrie des données metro, et quels sont leurs attributs?
Réponse
Nous utilisons la fonction st_geometry() pour connaître la géométrie des données metro:
Geometry set for 436 features
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -123.1 ymin: -37.81 xmax: 174.8 ymax: 60.17
Geodetic CRS: WGS 84
First 5 geometries:
POINT (69.17 34.53)
POINT (3.042 36.75)
POINT (13.23 -8.837)
POINT (-58.4 -34.61)
POINT (-64.18 -31.41)
Les données metro sont donc composées de points.
Les attributs sont donnés par la fonction names():
[1] "name" "name_long" "iso_a3" "pop1950"
[5] "pop1960" "pop1970" "pop1980" "pop1990"
[9] "pop2000" "pop2010" "pop2020" "pop2030"
[13] "geometry"
Les différents attributs correspondent aux tailles des populations des métropoles du monde à différentes années et à leur projection pour l’année 2030.
b) Déterminer les dix premières entrées des attributs name et pop2020 des données metro.
Réponse
Simple feature collection with 10 features and 2 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -64.18 ymin: -37.81 xmax: 153 ymax: 40.18
Geodetic CRS: WGS 84
name pop2020 geometry
2 Kabul 5721697 POINT (69.17 34.53)
8 Algiers 2835218 POINT (3.042 36.75)
13 Luanda 6836849 POINT (13.23 -8.837)
16 Buenos Aires 15894307 POINT (-58.4 -34.61)
17 Cordoba 1562509 POINT (-64.18 -31.41)
25 Rosario 1453814 POINT (-60.64 -32.95)
32 Yerevan 1023703 POINT (44.51 40.18)
33 Adelaide 1320783 POINT (138.6 -34.93)
34 Brisbane 2388517 POINT (153 -27.47)
37 Melbourne 4500501 POINT (145 -37.81)
c) En utilisant les données metro et World, créer une carte du monde sur laquelle les métropoles sont représentées par un cercle dont le diamètre est proportionnel à la taille de sa population en 2020. La carte doit comprendre les éléments suivants:
- Chaque métropole est illustrée par un cercle rouge de bordure noire.
- La légende porte le nom “Population”.
- La carte du monde est blanche et seules les frontières noires entre les pays y apparaissent.
Réponse
Nous utilisons tm_borders() pour illustrer les frontières des pays, puis tm_symbols() pour illustrer les métropoles.
tm_shape(World)+
tm_borders(col = "black")+
tm_shape(metro)+
tm_symbols(fill = "red",
col = "black",
size = "pop2020",
size.legend = tm_legend(title = "Population", orientation = "portrait"))
Question 3
a) Les données land forment un objet de classe stars. C’est un objet matriciel composé de plusieurs couches d’attributs. Déterminer les couches comprises dans land.
Réponse
Nous utilisons la fonction names() pour déterminer le nom des couches (attributs) des données land:
[1] "cover" "cover_cls" "trees" "elevation"
Pour avoir plus d’informations sur l’objet land et connaître les facteurs possibles pour chaque attribut, nous pouvons simplement écrire land dans le terminal R:
stars object with 2 dimensions and 4 attributes
attribute(s):
cover
Water bodies :393060
Snow / Ice : 61986
Herbaceous : 21377
Tree Open : 16171
Sparse vegetation: 12247
Cropland : 11658
(Other) : 66701
cover_cls trees
Water :393060 Min. : 0.0
Snow/ice : 61986 1st Qu.: 0.0
Forest : 48851 Median : 0.0
Other natural vegetation : 32611 Mean : 15.6
Bare area/Sparse vegetation: 26904 3rd Qu.: 19.0
Cropland : 17843 Max. :100.0
(Other) : 1945 NAs :393060
elevation
Min. :-412
1st Qu.: 218
Median : 608
Mean :1140
3rd Qu.:1941
Max. :6410
NAs :389580
dimension(s):
from to offset.xmin delta.xmax refsys point x/y
x 1 1080 -180 0.333 WGS 84 NULL [x]
y 1 540 90 -0.333 WGS 84 NULL [y]
La couche cover illustre la couverture terrestre et comprend 20 catégories différentes.
[1] "Broadleaf Evergreen Forest"
[2] "Broadleaf Deciduous Forest"
[3] "Needleleaf Evergreen Forest"
[4] "Needleleaf Deciduous Forest"
[5] "Mixed Forest"
[6] "Tree Open"
[7] "Shrub"
[8] "Herbaceous"
[9] "Herbaceous with Sparse Tree/Shrub"
[10] "Sparse vegetation"
[11] "Cropland"
[12] "Paddy field"
[13] "Cropland / Other Vegetation Mosaic"
[14] "Mangrove"
[15] "Wetland"
[16] "Bare area,consolidated (gravel,rock)"
[17] "Bare area,unconsolidated (sand)"
[18] "Urban"
[19] "Snow / Ice"
[20] "Water bodies"
La couche cover_cls illustre de façon simplifiée la couverture terrestre en regroupant les 20 catégories précédentes en 8 catégories différentes.
[1] "Forest"
[2] "Other natural vegetation"
[3] "Cropland"
[4] "Wetland"
[5] "Bare area/Sparse vegetation"
[6] "Urban"
[7] "Snow/ice"
[8] "Water"
La couche trees illustre le pourcentage de couverture forestière par pixel. Finalement, la couche elevation représente l’élévation en mètres.
b) Utiliser la palette de couleur "brewer.greens" de cols4all pour produire une carte du pourcentage de couvert forestier. De plus, la carte doit comprendre les éléments suivants:
- Six classes de pourcentage de couvert.
- Un titre principal “Pourcentage de couvert forestier” de taille 1.
- Une légende extérieure à la carte, située sous la carte, horizontale et sans titre.
- Une légende dont les chiffres sont séparés par le symbole “-”.
Réponse
Nous utilisons la fonction tm_raster() pour illustrer la couche trees de l’objet land. La palette est spécifiée directement dans tm_scale_intervals(). La position de la légende est définie dans col.legend = tm_legend(), et le format des chiffres dans tm_layout().
tm_shape(land) +
tm_raster("trees",
col.scale = tm_scale_intervals(n = 6, values = "brewer.greens"),
col.legend = tm_legend(title = "",
orientation = "landscape",
position = tm_pos_out("center", "bottom"))) +
tm_layout(legend.format = list(text.separator = "-")) +
tm_title("Pourcentage de couvert forestier", size = 1)
Question 4
a) En utilisant les données land, produire une carte interactive de la couverture terrestre simplifiée (cover_cls). N’oubliez pas de revenir au mode statique à la fin.
Réponse
ℹ tmap modes "plot" - "view"
b) En utilisant les données metro et World, produire une carte interactive des métropoles mondiales avec OpenStreetMap comme fond de carte. Le nom de chaque métropole doit apparaître lors du survol de la souris.
Réponse
On utilise tm_basemap() pour choisir le fond de carte, et l’argument hover dans tm_symbols() pour afficher une valeur d’attribut au survol :
tmap_mode("view")
tm_shape(metro) +
tm_symbols(fill = "purple", size = 0.3, hover = "name") +
tm_basemap("OpenStreetMap")
tmap_mode("plot")ℹ tmap modes "plot" - "view"