Package oceanis

Réaliser des cartes d'études et d'analyses à partir de données mono ou bilocalisées.

Monolocalisées

Bilocalisées

Préparation des données

Chargement des données

Pour charger des données, le package rio permet d'importer des fichiers de formats différents (csv, sas, xls, dbf, rda, rds, html, xml, ods…).

La fonction import(file) permet d'importer le fichier de données.

donnees_monoloc <- rio::import(file = system.file("data/donnees_monoloc.rda", package = "oceanis"))

Pour information, la table donnees_monoloc est un data.frame contenant 6 variables, le code des départements, les libellés, la population en 2010, en 2015, la variation annuelle moyenne de la population entre 2010 et 2015 et le code région d'appartenance. Son champ est la France métropolitaine.

Création des variables de classes

Pour calculer une variable de classes à partir de variables en volume présentes dans le tableau de données, vous pouvez passer par l'une des fonctions suivantes :

Ces fonctions ajoutent au tableau de données la colonne de variable de classes.

Vous pouvez également visualiser la distribution d'une variable de classes :

library(oceanis)
## Loading required package: shiny
## Loading required package: shinyBS

# chargement des donnees
donnees_monoloc <- rio::import(file = system.file("data/donnees_monoloc.rda", package = "oceanis"))
# visualisation de la distribution de la variable VAR_AN_MOY
distrib_variable(data = donnees_monoloc ,varRatio = "VAR_AN_MOY", nbClasses = 4)

plot of chunk unnamed-chunk-3

Préparation des fonds de carte

Chargement des fonds de carte

Les objets géométriques utilisés dans les fonctions du package “oceanis” sont des objets sf issus du package sf (Simple Features for R).

En plus de la géométrie, les objets sf peuvent contenir des données de type data.frame ou tibble.

Pour charger un fond de carte de format ShapeFile (.shp) en un objet R de format sf, il suffit d'appeler la fonction sf::read_sf ou sf::st_read.

# chemin du fond de carte .shp
path_to_shp <- system.file("extdata","dep_francemetro_2018.shp", package = "oceanis")
# import de l'objet sf
depm <- sf::st_read(dsn = path_to_shp, quiet = TRUE)

# visualisation de la geometrie
# modification des marges
par(mai = c(0,0,0,0))
# contour des departements de France metropolitaine
plot(sf::st_geometry(depm))

plot of chunk fondCarte

Création d'un zonage à façon

Vous n'avez pas à votre disposition de fond de carte .shp correspondant à votre zonage d'études. Vous pouvez le générer à partir d'autres fonds de carte disponibles. Par exemple, à partir de zonages administratifs (communes, départements, régions…) ou d'études (intercommunalités, aires urbaines, zones d'emploi…).

La fonction zonage_a_facon permet de créer son propre zonage à façon.

L'exemple ci-dessous permet de resconstituer les zones d'emploi des Bouches-du-Rhône à partir d'un fond communal.

library(oceanis)

# chargement des donnees :
# donnees a facon avec variable de regroupement (ZE2010)
donnees_a_facon <- rio::import(file = system.file("data/donnees_a_facon.rda", package = "oceanis"))
# fond communal des departements 13, 30, 83 et 84
com_dep_13_30_83_84 <- rio::import(file = system.file("data/com_dep_13_30_83_84.rda", package = "oceanis"))

# chemin du fond de carte .shp
path_to_shp <- system.file("extdata","dep_francemetro_2018.shp", package = "oceanis")
# import en objet sf
depm <- sf::st_read(dsn = path_to_shp, quiet = TRUE, stringsAsFactors = FALSE)

# creation du zonage des zones d'emploi des Bouches-du-Rhone (partie entiere des ze)
ze13etplus <- zonage_a_facon(fondMaille = com_dep_13_30_83_84, groupe = donnees_a_facon,
                             idMaille = "DEPCOM", idGroupe = "ZE2010", libGroupe = "LIB_ZE2010",
                             fondContour = NULL, dom = "0")
# creation du zonage des zones d'emploi des Bouches-du-Rhone (partie tronquee des ze au contour du departement)
ze13 <- zonage_a_facon(fondMaille = com_dep_13_30_83_84, groupe = donnees_a_facon, idMaille = "DEPCOM",
                       idGroupe = "ZE2010", libGroupe = "LIB_ZE2010",
                       fondContour = depm[depm$code=="13",], dom = "0")

# visualisation de la geometrie
# modification des marges
par(mai = c(0,0,0,0))
# fond des ze des Bouches-du-Rhone en 1er pour fixer le niveau de zoom, en bleu
plot(sf::st_geometry(ze13etplus), col = "powderblue", border = "transparent")
# fond de la partie tronquee des ze des Bouches-du-Rhone, en rouge
plot(sf::st_geometry(ze13), col = "lightsalmon", border = "transparent", add = TRUE)
# contour des communes
plot(sf::st_geometry(com_dep_13_30_83_84), col = "transparent", border = "lavender", add = TRUE)
# contour de la partie tronquee des ze des Bouches-du-Rhone, en rouge
plot(sf::st_geometry(ze13), col = "transparent", border = "indianred", lwd = 3, add = TRUE)
# contour des ze des Bouches-du-Rhone, en bleu
plot(sf::st_geometry(ze13etplus), col = "transparent", border = "steelblue", lwd = 3, add = TRUE)

plot of chunk zonageAFacon

Création de cartes avec les fonctions shiny_()

Les fonctions shiny_() permettent de visualiser les cartes dans un environnement web utilisant la technologie R-Shiny (package shiny Web Application Framework for R). Cet environnement permet de modifier à la volée le paramétrage de la carte (nombre de classes, méthode de calcul des classes, taille des ronds, des flèches, filtres sur les données etc…). La carte est alors actualisée à chaque modification de paramètres.

Les cartes sont interactives car elles sont dans le format leaflet (package leaflet Leaflet for R). Il est possible de se déplacer, de zoomer sur la carte et de cliquer sur les territoires pour faire apparaître des informations sous forme d'info-bulles (ou pop-up).

Voici deux exemples de cartes réalisées avec les fonctions shiny_classes_ronds() pour une représentation de données monolocalisées avec des ronds propotionnels sur une analyse en classes et shiny_joignantes() pour une représentation de données bilocalisées avec visualisation de la direction et du volume du flux.

library(oceanis)
library(shiny)

# chargement des donnees
donnees_monoloc <- rio::import(file = system.file("data/donnees_monoloc.rda", package = "oceanis"))

# import du fond des departements
depm <- sf::st_read(dsn = system.file("extdata","dep_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond des regions
regm <- sf::st_read(dsn = system.file("extdata","reg_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond de France metropolitaine
fram <- sf::st_read(dsn = system.file("extdata","francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)

shiny_classes_ronds(data = donnees_monoloc, fondMaille = depm[depm$reg %in% c("93","94"),], fondMailleElargi = depm, fondContour = fram, fondSuppl = regm, idData = "COD_DEP",varVolume = "POP_2015", varRatio = "VAR_AN_MOY")

library(oceanis)
library(shiny)

# chargement des donnees
donnees_biloc <- rio::import(file = system.file("data/donnees_biloc.rda", package = "oceanis"))

# import du fond des regions
regm <- sf::st_read(dsn = system.file("extdata","reg_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond des departements
depm <- sf::st_read(dsn = system.file("extdata","dep_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond de France metropolitaine
fram <- sf::st_read(dsn = system.file("extdata","francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)

shiny_joignantes(data = donnees_biloc, fondMaille = regm, typeMaille = "REG", fondContour = fram, fondSuppl = depm, idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", decalageAllerRetour = 10, decalageCentroid = 20)

Création de cartes avec les fonctions leaflet_()

Les fonctions leaflet_() proposent des cartes en sorties utilisant la technologie leaflet (package leaflet Leaflet for R) comme pour les fonctions shiny. Ces fonctions sont davantage paramétrables et la modification des cartes (ajout d'une légende, modification de couleurs, etc…) est possible par d'autres fonctions dédiées.

Ci-dessous, un exemple de cheminement possible pour réaliser une carte complète avec leaflet. Cette carte utilise des données monolocalisées avec une analyse en classes dans les ronds. Appeler l'objet map dans la console à chaque étape pour afficher la carte.

library(oceanis)
library(leaflet)

# chargement des donnees
donnees_monoloc <- rio::import(file = system.file("data/donnees_monoloc.rda", package = "oceanis"))

# import du fond des departements
depm <- sf::st_read(dsn = system.file("extdata","dep_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond des regions
regm <- sf::st_read(dsn = system.file("extdata","reg_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)

# affichage de la carte
map <- leaflet_ronds_classes(data = donnees_monoloc, fondMaille = depm[depm$reg=="93",], fondMailleElargi = depm, fondSuppl = regm, idData = "COD_DEP", varVolume = "POP_2015", varRatio = "VAR_AN_MOY")

# affichage du rayon du rond le plus grand en metres
rayon_ronds(map)
## [1] 23668.46

# affichage de la carte avec des rayons de ronds plus grands
map <- leaflet_ronds_classes(data = donnees_monoloc, fondMaille = depm[depm$reg == "93",], fondMailleElargi = depm, fondSuppl = regm, idData = "COD_DEP", varVolume = "POP_2015", varRatio = "VAR_AN_MOY", rayonRond = 29000, rapportRond = NULL)

# affichage du rapport du rond le plus grand, a recuperer pour permettre la comparaison de plusieurs cartes
rapport_ronds(map)
## [1] 1310165

# ajout de la legende des ronds (position par defaut)
map <- add_legende_ronds(map = map, titre = "Population en 2015", zoom = 6)
## [INFO] Les coordonnées de la légende des ronds sont : longitude (x) =
## 7.71612696800038 degré ; latitude (y) = 45.1268480101767 degré
# ajout de la legende des classes (position par defaut)
map <- add_legende_classes(map = map, titre = "Variation ann.moy. 2010-2015", zoom = 6)
## [INFO] Les coordonnées de la légende des classes sont : longitude (x) =
## 7.71612696800038 degré ; latitude (y) = 42.9820332433454 degré

# modification de la position de la legende des ronds et du niveau de zoom
map <- add_legende_ronds(map = map, titre = "Population en 2015", lng = 8, lat = 44, zoom = 8)
## [INFO] Les coordonnées de la légende des ronds sont : longitude (x) = 8
## degré ; latitude (y) = 44 degré
# modification de la position de la legende des classes et du niveau de zoom
map <- add_legende_classes(map = map, titre = "Variation ann.moy. 2010-2015", lng = 7.5, lat = 43.5, zoom = 8)
## [INFO] Les coordonnées de la légende des classes sont : longitude (x) = 7.5
## degré ; latitude (y) = 43.5 degré

# ajout d'une source a la carte
map <- add_source(map = map, source = "Source : INSEE - RP2016")
# ajout d'un titre a la carte
map <- add_titre(map = map, titre = "Population des departements de la region Provence-Alpes-Cote d'Azur en 2015 et son evolution depuis 2010")

# affichage de la palette par defaut
recup_palette(stylePalette = "defaut")
## [[1]]
## [1] "#5A0A14" "#82141B" "#9B231C" "#B24B1D" "#D47130" "#E4A75A" "#F2CE93"
## 
## [[2]]
## [1] "#C9DAF0" "#95BAE2" "#5182B6" "#005289" "#003269" "#001E5A" "#000050"

# affichage de la palette InseePremiere
recup_palette(stylePalette = "InseePremiere")
## [[1]]
## [1] "#7F0029" "#CC1543" "#DE635B" "#F79C85" "#FDE3DE"
## 
## [[2]]
## [1] "#ECF4D8" "#CDD78C" "#91B778" "#549534" "#005941"

# modification de la couleur de bordure des ronds
map <- set_couleur_ronds(map = map, colBorder = "grey")
# modification du style de la palette
map <- set_couleur_classes(map = map, stylePalette = "InseePremiere")

# modification de l'opacite de la representation elargie
map <- set_opacite_elargi(map, opacite = 0.3)

# ajout d'un fond OpenStreetMap
map <- add_fond_osm(map)

Création de cartes avec les fonctions plot_()

Les fonctions plot_() sont hautement paramétrables. Les cartes en sortie ne sont pas interactives mais leur plus-value réside dans la possibilité d'ajouter des étiquettes. Il est possible également d'ajouter autant de fonds que l'on souhaite sous ou sur la couche d'analyse.

Le style des fonds ajoutés et des étiquettes est paramétrable. Les fonctions plot_() retournent le fond brut de l'analyse (ronds, maille ou flèches).

L'exemple suivant montre comment construire une carte avec des flèches saphirs en utilisant la fonction plot_saphirs().

library(oceanis)

# chargement des donnees
donnees_biloc_saphirs <- rio::import(file = system.file("data/donnees_biloc_saphirs.rda", package = "oceanis"))

# import du fond des regions
regm <- sf::st_read(dsn = system.file("extdata","reg_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond de France metropolitaine
fram <- sf::st_read(dsn = system.file("extdata","francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond des pays
paysm <- sf::st_read(dsn = system.file("extdata","paysf_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond de mer
merm <- sf::st_read(dsn = system.file("extdata","merf_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)

# affichage de la carte
fond_saphirs <- plot_saphirs(data = donnees_biloc_saphirs, fondMaille = regm, typeMaille = "REG", idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", direction = "Ent", titreLeg = "Entrees", xLeg = 1100000, yLeg = 6470000, titreCarte = "Migrations residentielles vers l'Ile-de-France", sourceCarte = "Source : INSEE - RP2016", colEntree = "#D2691E", colBorder = "transparent", colBorderMaille = "grey")
## [INFO] La largeur maximale des fleches = 100[INFO] Les coordonnees de la
## legende sont x = 1100000 metres ; y = 6470000 metres

plot of chunk plotSaphirs


# construction de la table des etiquettes
etiquettes <- coordonnees_etiquettes(fondMaille = regm, listeCode = as.character(regm$code))
# modification des valeurs (latitude Y, longitude X, taille, couleur et style de police)
etiquettes[etiquettes$CODE=="24","Y"] <- 6680000
etiquettes[etiquettes$CODE=="27","Y"] <- 6660000
etiquettes[etiquettes$CODE=="28","X"] <- 410000
etiquettes[etiquettes$CODE=="32","Y"] <- 7015000
etiquettes[etiquettes$CODE=="44","X"] <- 955000
etiquettes[etiquettes$CODE=="52","X"] <- 330000
etiquettes[etiquettes$CODE=="52","Y"] <- 6700000
etiquettes[etiquettes$CODE=="53","X"] <- 215000
etiquettes[etiquettes$CODE=="75","Y"] <- 6420000
etiquettes[etiquettes$CODE=="76","Y"] <- 6270000
etiquettes[etiquettes$CODE=="84","Y"] <- 6455000
etiquettes[etiquettes$CODE=="93","Y"] <- 6290000
etiquettes[etiquettes$CODE=="94","Y"] <- 6120000
etiquettes[etiquettes$CODE!="11","TAILLE"] <- 0.6
etiquettes[etiquettes$CODE=="11","COL"] <- "#002D7F"
etiquettes[etiquettes$CODE!="11","FONT"] <- 1

# affichage de la carte
fond_saphirs <- plot_saphirs(data = donnees_biloc_saphirs, fondMaille = regm, typeMaille = "REG", idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", direction = "Ent", titreLeg = "Entrees", xLeg = 1150000, yLeg = 6470000, titreCarte = "Migrations residentielles vers l'Ile-de-France", sourceCarte = "Source : INSEE - RP2016", etiquettes = etiquettes, colEntree = "#D2691E", colBorder = "transparent", colBorderMaille = "grey")
## [INFO] La table d'étiquettes fournie contient au moins 4 colonnes.
## Elles doivent être : l'identifiant de la maille ('CODE'), le libellé de
## l'étiquette ('LIBELLE') et les coordonnées 'X' et 'Y' de l'étiquette. Peut
## etre ajoutées éventuellement les colonnes 'TAILLE', 'FONT' et 'COL'.[INFO]
## La largeur maximale des fleches = 100[INFO] Les coordonnees de la legende
## sont x = 1150000 metres ; y = 6470000 metres

plot of chunk plotSaphirs


# ajout de colonnes dans les fonds pour modifier leur apparence
# couleur de remplissage : COL
# couleur des contours : BORDER
# epaisseur des contours : EPAISEEUR
merm$COL <- "lightsteelblue"
merm$BORDER <- "lightsteelblue"
paysm$COL <- "gray"
paysm$BORDER <- "white"
fram$BORDER <- "darkgray"
fram$EPAISSEUR <- 2

# creation des listes des fonds d'habillage, en-dessous et au-dessus de l'analyse
fondSousAnalyse <- list(merm,paysm)
fondSurAnalyse <- list(fram)

# affichage de la carte
fond_saphirs <- plot_saphirs(data = donnees_biloc_saphirs, fondMaille = regm, fondSousAnalyse = fondSousAnalyse, fondSurAnalyse = fondSurAnalyse,typeMaille = "REG", idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", direction = "Ent", titreLeg = "Entrees", xLeg = 1150000, yLeg = 6470000, titreCarte = "Migrations residentielles vers l'Ile-de-France", sourceCarte = "Source : INSEE - RP2016", etiquettes = etiquettes, colEntree = "#D2691E", colBorder = "transparent", colBorderMaille = "grey")
## [INFO] La table d'étiquettes fournie contient au moins 4 colonnes.
## Elles doivent être : l'identifiant de la maille ('CODE'), le libellé de
## l'étiquette ('LIBELLE') et les coordonnées 'X' et 'Y' de l'étiquette. Peut
## etre ajoutées éventuellement les colonnes 'TAILLE', 'FONT' et 'COL'.[INFO]
## La largeur maximale des fleches = 100[INFO] Les coordonnees de la legende
## sont x = 1150000 metres ; y = 6470000 metres

plot of chunk plotSaphirs

Export de la carte

En fichier plat (.png, .jpg, .pdf)

Avec les fonctions shiny_()

Il n'est pas possible d'exporter automatiquement la carte dans un format image ou en pdf.

Manuellement, il faut procéder à une capture d'écran de la carte puis l'enregistrer dans le format souhaité.

Avec les fonctions leaflet_()

Il existe 3 fonctions d'export de carte :

Avec les fonctions plot_()

Manuellement, on peut soit effectuer une capture d'écran, soit utiliser la fonctionnalité “export” de RStudio de l'onglet Plots.

Pour automatiser l'export d'une carte réalisée avec une fonction plot_(), il est possible de rediriger la sortie de la fonction dans un dossier spécifique. Le package grDevices propose plusieurs sorties (.bmp, .jpeg, .png ou .tiff)


library(grDevices)

jpeg(filename = "sortie.jpg", quality = 100, width = 16, height = 18, units = "cm", res = 120)

# affichage de la carte
fond_saphirs <- plot_saphirs(data = donnees_biloc_saphirs, fondMaille = regm, fondSousAnalyse = fondSousAnalyse, fondSurAnalyse = fondSurAnalyse,typeMaille = "REG", idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", direction = "Ent", titreLeg = "Entrees", xLeg = 1150000, yLeg = 6470000, titreCarte = "Migrations residentielles vers l'Ile-de-France", sourceCarte = "Source : INSEE - RP2016", etiquettes = etiquettes, colEntree = "#D2691E", colBorder = "transparent", colBorderMaille = "grey")

dev.off()

pdf(file = "sortie.pdf", width = 10, height = 10)

# affichage de la carte
fond_saphirs <- plot_saphirs(data = donnees_biloc_saphirs, fondMaille = regm, fondSousAnalyse = fondSousAnalyse, fondSurAnalyse = fondSurAnalyse,typeMaille = "REG", idDataDepart = "REG_DEPART", idDataArrivee = "REG_ARRIVEE", varFlux = "MIGR", direction = "Ent", titreLeg = "Entrees", xLeg = 1150000, yLeg = 6470000, titreCarte = "Migrations residentielles vers l'Ile-de-France", sourceCarte = "Source : INSEE - RP2016", etiquettes = etiquettes, colEntree = "#D2691E", colBorder = "transparent", colBorderMaille = "grey")

dev.off()

En projet Qgis

Avec les fonctions shiny_()

Pour exporter la carte en projet Qgis (.qgs), dans le panneau de gauche il faut cliquer sur le bouton “Exporter en projet Qgis” puis spécifier le nom du projet. Un titre descriptif et informatif peuvent être donnés. La source peut être aussi personnalisée. Le choix du dossier en sortie se fait après avoir cliqué sur “Exporter”.

Avec les fonctions leaflet_()

Il existe une fonction d'export Qgis pour chacune des huit représentations cartographiques.

Avant d'exporter la carte, il faut avoir poser la légende.

library(oceanis)
library(leaflet)

# chargement des donnees
donnees_monoloc <- rio::import(file = system.file("data/donnees_monoloc.rda", package = "oceanis"))

# import du fond des departements
depm <- sf::st_read(dsn = system.file("extdata","dep_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)
# import du fond des regions
regm <- sf::st_read(dsn = system.file("extdata","reg_francemetro_2018.shp", package = "oceanis"), quiet = TRUE, stringsAsFactors = FALSE)

# affichage de la carte avec des rayons de ronds plus grands
map <- leaflet_ronds_classes(data = donnees_monoloc, fondMaille = depm[depm$reg == "93",], fondMailleElargi = depm, fondSuppl = regm, idData = "COD_DEP", varVolume = "POP_2015", varRatio = "VAR_AN_MOY", rayonRond = 29000, rapportRond = NULL)

# modification de la position de la legende des ronds et du niveau de zoom
map <- add_legende_ronds(map = map, titre = "Population en 2015", lng = 8.5, lat = 45, zoom = 8)
# modification de la position de la legende des classes et du niveau de zoom
map <- add_legende_classes(map = map, titre = "Variation ann.moy. 2010-2015", lng = 8, lat = 44.5, zoom = 8)
# ajout d'une source a la carte
map <- add_source(map = map, source = "Source : INSEE - RP2016")
# ajout d'un titre a la carte
map <- add_titre(map = map, titre = "Population des departements de la region Provence-Alpes-Cote d'Azur en 2015 et son evolution depuis 2010")
# modification de la couleur de bordure des ronds
map <- set_couleur_ronds(map = map, colBorder = "grey")
# modification du style de la palette
map <- set_couleur_classes(map = map, stylePalette = "InseePremiere")
# modification de l'opacite de la representation elargie
map <- set_opacite_elargi(map, opacite = 0.3)

export_qgis_ronds_classes(map, cheminDossier = getwd(), nomFichier = "export_carte_rp_ac", titre1 = "Population des departements de la region Provence-Alpes-Cote d'Azur en 2015 et son evolution depuis 2010", titre2 = "", source = "Source : INSEE - RP2016")

Dans Qgis, ouvrez le projet .qgs précédemment créé. Tous les fonds utilisés s'affichent dans le canevas et une mise en page brute (par défaut) est également proposée.