ajout détails ggplot2
This commit is contained in:
parent
24ce5e3817
commit
dae2e4bd84
1 changed files with 183 additions and 22 deletions
205
leaflet.Rmd
205
leaflet.Rmd
|
@ -19,9 +19,23 @@ knitr::opts_chunk$set(echo = FALSE)
|
|||
```
|
||||
|
||||
## Introduction
|
||||
Leaflet est une librairie en JavaScript permet de créer des cartes géographiques interactives avec différents langages de programmation dont R.
|
||||
[Leaflet](http://leafletjs.com/) est une bibliothèque en JavaScript permet de créer des cartes géographiques interactives avec différents langages de programmation dont R. On peut retrouver une introduction à Leaflet pour R sur le site de RStudio: [Leaflet for R](https://rstudio.github.io/leaflet/).
|
||||
|
||||
Pour installer cette librairie dans R, utiliser la commande suivante:
|
||||
Les différentes caractéristiques de Leaflet:
|
||||
|
||||
- Zoom et déplacement dans la carte
|
||||
- Utilisation de plusieurs types de couches dont:
|
||||
- Tuiles de cartes ([OpenStreetMap](http://openstreetmap.org/) et autres)
|
||||
- Marqueurs
|
||||
- Polygones
|
||||
- Lignes
|
||||
- Bulles d'information
|
||||
- Toute autre information représentée dans le format [GeoJSON](http://leafletjs.com/examples/geojson/)
|
||||
|
||||
Cette bibliothèque s'utilise aussi dans le cadre des documents [R Markdown](http://rmarkdown.rstudio.com/) (tel que ce document que vous consultez en ce moment) et des applications web [Shiny](http://shiny.rstudio.com/gallery/). Elle permet d'utiliser les formats de données de la bibliothèque [`sp`](https://cran.r-project.org/web/packages/sp/index.html) ou des data.frmee avec deux colonnes contenant la longitude et la latitude.
|
||||
|
||||
## Installation
|
||||
Pour installer cette bibliothèque dans R, utiliser la commande suivante:
|
||||
```{r, echo=TRUE, eval=FALSE}
|
||||
install.packages("leaflet")
|
||||
```
|
||||
|
@ -31,15 +45,16 @@ Pour la charger, utilisez
|
|||
library("leaflet")
|
||||
```
|
||||
|
||||
## Autres librairies
|
||||
## Autres bibliothèques
|
||||
|
||||
Ces autres librairies nous seront utiles
|
||||
Ces autres bibliothèques nous seront utiles dans cet atelier
|
||||
```{r, echo=TRUE}
|
||||
library("rgdal")
|
||||
library("dplyr")
|
||||
library("webshot")
|
||||
library("shiny")
|
||||
library("htmltools")
|
||||
library("reshape2")
|
||||
```
|
||||
|
||||
## La composition d'une carte
|
||||
|
@ -55,7 +70,7 @@ Les données géographiques vectorielles (polygones, lignes, points) sont souven
|
|||
|
||||
L'objet data de la vignette peut accueillir différentes structures de données, mais il faut au préalablement les créer à partir des données sources
|
||||
|
||||
Nous utiliserons la librairie `rgdal` our lire les données et créer ces structures
|
||||
Nous utiliserons la bibliothèque `rgdal` our lire les données et créer ces structures
|
||||
|
||||
## Données utilisées dans cet atelier
|
||||
Dans cet atelier, nous cherchons à représenter la couverture WiFi du réseau [ZAP Québec](http://www.zapquebec.org/) à l'aide de la localisation des différents points d'accès contenus dans le fichier "WIFI.KML" téléchargé sur[le portail Données Québec](https://www.donneesquebec.ca/recherche/fr/dataset/vque_29). Ce fichier est partagé sous la licence [Creative Commons - Attribution 4.0](https://www.donneesquebec.ca/fr/licence/#cc-by).
|
||||
|
@ -64,17 +79,22 @@ Dans cet atelier, nous cherchons à représenter la couverture WiFi du réseau [
|
|||
Le format de fichiers KML est un standard ouvert [développé par Google](https://developers.google.com/kml/documentation/) pour l'application Google Earth. C'est un fichier XML avec des caractéristiques particulières.
|
||||
|
||||
## Acquisition des données (1/2)
|
||||
Pour le lire, on utilise la fonction `readOGR`:
|
||||
Pour lire le fichier de donnéees, on utilise la fonction `readOGR()` de `rgdal`.
|
||||
```{r, echo=TRUE}
|
||||
WIFI_DATA <- readOGR("./DATA/WIFI.KML", "WIFI")
|
||||
```
|
||||
|
||||
## Acquisition des données (2/2)
|
||||
On obtient un objet de la classe `SpatialPointsDataFrame`.
|
||||
```{r, echo=TRUE}
|
||||
class(WIFI_DATA)
|
||||
```
|
||||
|
||||
Cette classe est un type de données complexer qui inclut entre autres un data.frame `data` contenant les données extraites du fichier KML. La structure complete de notre exemple se rpésente comme suit.
|
||||
|
||||
```{r}
|
||||
str(WIFI_DATA)
|
||||
```
|
||||
|
||||
## Attributs
|
||||
Chaque point présente 6 attributs:
|
||||
|
||||
|
@ -95,11 +115,13 @@ Cette vignette peut être modifiées à l'aide de différentes propriétés et d
|
|||
|
||||
## Ajout des données à la carte
|
||||
|
||||
On associe à la propriété data les données que nous avons importé. On utilise la fonction `addTiles` pour ajouter des tuiles de fond et `addMarker` pour ajouter des marqueurs basés sur les coordonnées géographiques. Enfin, on utilise l'argument popup pour inclure une description qui sera affichée en cliquant sur un marqueur. Les données que bous tilisons incluent déjà une description en HTML.
|
||||
On associe à la propriété data les données que nous avons importé. On utilise la fonction `addTiles` pour ajouter des tuiles de fond et `addMarker` pour ajouter des marqueurs basés sur les coordonnées géographiques. Enfin, on utilise l'argument `popup` pour inclure une description qui sera affichée en cliquant sur un marqueur. Les données que nous utilisons incluent déjà une description en HTML. L'argument `group` sert a`attribuer iun idnetifiant pour chaque élément composant la carte. Il n'est pas affiché sur la carte sauf si on le demande explicitement, dans un menu par exemple.
|
||||
|
||||
```{r, echo=TRUE}
|
||||
l1 <- leaflet(data=WIFI_DATA) %>%
|
||||
addTiles() %>%
|
||||
addMarkers(popup = ~ description)
|
||||
addTiles(group = "Tuiles OSM") %>%
|
||||
addMarkers(popup = ~ description,
|
||||
group = "Points d'accès")
|
||||
```
|
||||
```{r, echo=TRUE}
|
||||
renderLeaflet(l1)
|
||||
|
@ -113,7 +135,9 @@ palette_arrond <- colorFactor(rainbow(levels(WIFI_DATA$ARROND) %>% length()),
|
|||
|
||||
l2 <- leaflet(data=WIFI_DATA) %>%
|
||||
addTiles() %>%
|
||||
addCircleMarkers(popup = ~ description, color = ~palette_arrond(ARROND))
|
||||
addCircleMarkers(popup = ~ description,
|
||||
color = ~palette_arrond(ARROND),
|
||||
group = "cerclepointsacces")
|
||||
```
|
||||
|
||||
```{r, echo=TRUE}
|
||||
|
@ -123,36 +147,79 @@ renderLeaflet(l2)
|
|||
## Ajout des polygones des arrondissements
|
||||
|
||||
On importe les données des limites des arrondissements à partir du fichier "ARROND.KML" téléchargé sur[le portail Données Québec](https://www.donneesquebec.ca/recherche/fr/dataset/vque_2). Ce fichier est partagé sous la licence [Creative Commons - Attribution 4.0](https://www.donneesquebec.ca/fr/licence/#cc-by).
|
||||
|
||||
```{r, echo=TRUE}
|
||||
ARROND <- readOGR("DATA/ARROND.KML","ARRONDISSEMENT")
|
||||
```
|
||||
|
||||
On crée ensuite une palette de couleurs qui associe une couleur à chaque arrondissement.
|
||||
```{r, echo=TRUE}
|
||||
palette_arrondissement <- colorFactor(rainbow(levels(ARROND$NOM) %>% length()),
|
||||
ARROND$NOM)
|
||||
|
||||
l1 %>% addPolygons(data=ARROND, color = ~palette_arrondissement(NOM))
|
||||
```
|
||||
|
||||
Enfin, on affiche la carte avec les polygones coloriés selon la palette définie précédemment.
|
||||
```{r, echo=TRUE}
|
||||
l1 %>% addPolygons(data=ARROND, color = ~palette_arrondissement(NOM), group="Arrondissements")
|
||||
```
|
||||
|
||||
Il est aussi possible d'ajouter plusieurs éléments à la carte pour en augmenter la facilité d'utilisation. Ici, on ajoute une légende ainsi qu'une boîte de contrôle qui permet de gérer l'affichage des différents éléments.
|
||||
|
||||
```{r}
|
||||
l1 %>%
|
||||
addPolygons(data=ARROND, color = ~palette_arrondissement(NOM), group="Arrondissements") %>%
|
||||
addLegend("bottomright", pal = palette_arrondissement, values = ARROND$NOM,
|
||||
title = "Arrondissements",
|
||||
opacity = 1,
|
||||
) %>%
|
||||
addLayersControl(
|
||||
baseGroups = c("Tuiles OSM"),
|
||||
overlayGroups = c("Points d'accès", "Arrondissements"),
|
||||
options = layersControlOptions(collapsed = FALSE)
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
# Plotly
|
||||
|
||||
## Introduction
|
||||
|
||||
Plotly est une bliblothèque de graphiques interactifs en JavaScript. Tout comme Leaflet, on peut l'utiliser via des interfaces dans plusieurs langages de programmation, dont R.
|
||||
[Plotly](https://plot.ly/) est une bliblothèque de graphiques interactifs en JavaScript. Tout comme Leaflet, on peut l'utiliser via des interfaces dans plusieurs langages de programmation, dont R. L'interface de programmation est documentée [sur ce site](https://plot.ly/r/).
|
||||
|
||||
Plotly permet de créer plusieurs types de graphiques (statistiques, scientifiques, cartes, 3d) et permet aussi de convertir des graphiques créés à partir de `ggplot2`.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
On installe `plotly` avec cette commande:
|
||||
```{r, eval=FALSE}
|
||||
install.packages(plotly)
|
||||
```
|
||||
|
||||
On charge ensuite la bliblothèque:
|
||||
```{r, echo=TRUE}
|
||||
library(plotly)
|
||||
```
|
||||
|
||||
|
||||
## Données sélectionnées
|
||||
Nous utiliserons les données suivantes:
|
||||
|
||||
[Enquête sur les dépenses des ménages (EDM), dépenses des ménages, selon le mode d'occupation du logement](http://ouvert.canada.ca/data/fr/dataset/ffd02f84-1b13-479f-83a9-35f6d17296c7)
|
||||
Nous utiliserons les données suivantes: [Enquête sur les dépenses des ménages (EDM), dépenses des ménages, selon le mode d'occupation du logement](http://ouvert.canada.ca/data/fr/dataset/ffd02f84-1b13-479f-83a9-35f6d17296c7) provenant du tableau CANSIM 203-0024 de Statistiques Canada. Cette source contient de l'information visée par la [Licence du gouvernement ouvert – Canada](http://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada).
|
||||
|
||||
```{r, echo=TRUE}
|
||||
emd_2016 <- read.table("DATA/02030024-fra.csv",sep=";", header=TRUE, dec = ",", na.strings = c("..","F"), stringsAsFactors = FALSE)
|
||||
```
|
||||
|
||||
Le jeu de données contient les variables suivantes:
|
||||
|
||||
- Date_Ref: La date de référence (année)
|
||||
- GEO: Canada, Province/Territoire
|
||||
- STAT: Le nom de la statistique
|
||||
- TENURE: Mode d’occupation du logement
|
||||
- SUMMARY: Certaines dépenses des ménages (catégorie)
|
||||
- Vecteur: Un identifiant interne à Statistique Canada
|
||||
- Coordonnée: Un identifiant interne à Statistique Canada
|
||||
- Valeur: Le montant de la dépense
|
||||
|
||||
La documentation complète se trouve dans le [Guide de l’utilisateur, Enquête sur les dépenses des ménages, 2014](http://www.statcan.gc.ca/pub/62f0026m/2016001/chap4-fra.htm)
|
||||
|
||||
## Sélection
|
||||
|
||||
On identifie les 20 catégories avec le plus de dépenses, peu importe le mode d'occupation du logement, en excluant les sommaires.
|
||||
|
@ -178,13 +245,18 @@ agg_emd_2016 <- emd_2016 %>%
|
|||
```
|
||||
|
||||
## Préparation des données
|
||||
|
||||
Cette étape permet de créer des colonnes de valeurs séparées par type d'occupation du logement. On utilise la bibliothèque `reshape2`
|
||||
|
||||
```{r, echo=TRUE}
|
||||
library(reshape2)
|
||||
cast_agg_emd_2016 <- agg_emd_2016 %>% dcast(SUMMARY ~ TENURE, value.var = "m_valeur")
|
||||
names_col <- names(cast_agg_emd_2016)
|
||||
names(cast_agg_emd_2016) <- c("SUMMARY","loc","pah","psh")
|
||||
top_labels <- names_col[-1]
|
||||
```
|
||||
## Graphiques
|
||||
|
||||
La fonction `plot_ly()`permet de créer tous les types de graphiques disponibles dans plotly. Il s'agit d'une syntaxe unifiée qui est une approche différente des autres approches de visualisation de données avec R. Pour ajouter des éléments à un graphique existant, on utilise la fonction `add_trace()`. Pour définir les paramètres généraux d'affichage, on utilise la fonction `layout()` qui permet entre autres de définir l'orientation du graphique, les axes, les marges et l'orientation du texte.
|
||||
|
||||
### Graphique à barres groupées
|
||||
On crée un [graphique à barres groupées](https://plot.ly/r/bar-charts/#grouped-bar-chart), qui permetta de comparer la dépense pour le même sommaire par mode d'occupation du logement.
|
||||
|
@ -251,12 +323,101 @@ plot_ly(data = cast_agg_emd_2016,
|
|||
|
||||
# ggplot2
|
||||
|
||||
[ggplot2](http://ggplot2.org/) est une bibliothèque développée spécifiquement pour R qui permet de créer des graphiques de qualité professionnelle en utilisant une syntaxe décrivant la "grammaire des graphiques" de Leland Wilkinson: [The Grammar of Graphics](https://www.springer.com/us/book/9780387245447).
|
||||
|
||||
ggplot2 est complexe et demande une courbe d'apprentissage par rapport à d'autres outils de visualisation. Par contre, il est possible de construire des graphiques exactement comme on les souhaite avec beaucoup de travail et de patience. Il est aussi possible de construire des thèmes élaborés pouvant être réutilisés dans des publications ou en entreprise. Le meilleur moyen d'apprendre ggplot2 est de consulter la [documentation en ligne](http://docs.ggplot2.org/current/) qui inclut de nombreux exemples.
|
||||
|
||||
## Installation
|
||||
|
||||
On installe ggplot2 avec cette commande:
|
||||
```{r, echo=TRUE, eval=FALSE}
|
||||
install.packages("ggplot2")
|
||||
```
|
||||
|
||||
On importe ggplot2 avec cette commande:
|
||||
```{r}
|
||||
library("ggplot2")
|
||||
```
|
||||
## Vocabulaire et fonctionnement
|
||||
|
||||
Un graphique comprend plusieurs types d'éléments:
|
||||
|
||||
- Geoms: Objets géométriques qui définissent le type de graphique
|
||||
- Statistics: Permettent une transformation des données
|
||||
- Scales: Permettent de changer l'échelle de l'affichage, que ce soit au niveau des dimensions ou des couleurs
|
||||
- Coordinate systems: Change la correspondance entre les coordonnées pour un affichage à l'écran
|
||||
- Faceting: Affiche différentes portions de données dans différents panneaux.
|
||||
- Position adjustments: Permettent de gérer les superpositions ou d'ajouter du flou dans les données
|
||||
- Annotation: Ajout d'annotations à un graphique
|
||||
- Fortify: Utiliser des données qui ne sont pas sous la forme de tables
|
||||
- Themes: Élements qui définissent un thème d'affichage, indépendamment du type de graphique
|
||||
- Aesthetics: Permet d'associer les données à des caractéristiques du graphique: les axes, les couleurs, les épaisseurs de traits, ...
|
||||
- Other: Autres outils
|
||||
|
||||
## Exemple
|
||||
|
||||
Pour cet exemple, on utilise le jeu de données [Effectif de la fonction publique fédérale par ministère et région](http://open.canada.ca/data/en/dataset/933f8f6e-daee-4368-a7dc-4eadc8b5ecfa) provanant de Secrétariat du Conseil du Trésor du Canada. Cette source contient de l'information visée par la [Licence du gouvernement ouvert – Canada](http://ouvert.canada.ca/fr/licence-du-gouvernement-ouvert-canada).
|
||||
|
||||
```{r, echo=TRUE}
|
||||
ssa_pop2 <- read.csv("DATA/ssa-pop2-fra.csv", sep=",", stringsAsFactors = FALSE) %>%
|
||||
filter(!Province %in% c("À l'étranger","Non disponible")) %>%
|
||||
mutate(new_date = ISOdate(floor(Date/100),Date %% 100,1)) %>%
|
||||
select(Province,new_date,Employés) %>%
|
||||
group_by(Province,new_date) %>%
|
||||
summarise(total_employes = sum(Employés)) %>%
|
||||
arrange(Province,new_date)
|
||||
```
|
||||
|
||||
## Graphique à lignes brisées
|
||||
Nous définissons la structure de bases pour créer notre graphiques. Nous identifions les données qui seront utilisées ainsi que les "esthétiques" du graphique.
|
||||
```{r, echo=TRUE}
|
||||
g1 <- ggplot(ssa_pop2, aes(x=new_date,y=total_employes))
|
||||
```
|
||||
|
||||
Nous désirons tracer un graphique à à lignes brisées pour représenter ces données, avec une ligne par province.
|
||||
|
||||
```{r, echo=TRUE}
|
||||
g1+geom_line(aes(group=Province))
|
||||
```
|
||||
|
||||
On aimerait plutôt avoir de la couleur !
|
||||
|
||||
```{r, echo=TRUE}
|
||||
g1+geom_line(aes(group=Province, colour=Province))
|
||||
```
|
||||
|
||||
On aimerait aussi mieux séparer les valeurs au bas du tableau. On va donc utiliser une échelle verticale logarithmique.
|
||||
|
||||
```{r, echo=TRUE}
|
||||
g2 <- g1+geom_line(aes(group=Province, colour=Province))+scale_y_log10()
|
||||
g2
|
||||
```
|
||||
|
||||
On a aussi la possibilité de convertir ce graphique en version interactive avec plotly.
|
||||
```{r, echo=TRUE}
|
||||
ggplotly(g2)
|
||||
```
|
||||
|
||||
## Graphique à boîte et moustaches
|
||||
|
||||
Un autre type de graphique qui permet d'observer la variation d'une variable (ici par rapport au temps) est le graphique à boîte et moustaches.
|
||||
```{r, echo=TRUE}
|
||||
g3 <- ggplot(ssa_pop2, aes(Province, total_employes))
|
||||
```
|
||||
|
||||
On convertis l'axe vertical en échelle logarithmique:
|
||||
```{r, echo=TRUE}
|
||||
g3+geom_boxplot(aes(colour=Province))+scale_y_log10()
|
||||
```
|
||||
|
||||
Ce type de graphique n'est pas géré par plotly, nous ne pouvons donmc pas le convertir en version interactive.
|
||||
|
||||
# ggplot2 et gganimate
|
||||
|
||||
L'utilisation combinée des librairies ggplot2 et gganimate nous permettra de créer une animation.
|
||||
L'utilisation combinée des bibliothèques ggplot2 et gganimate nous permettra de créer une animation.
|
||||
Nous reproduisons ici la [pyramide des âges animée](https://www.donneesquebec.ca/recherche/fr/dataset/pyramide-des-ages-animee) de l'Institut de la statistique du Québec. Les données téléchargées se trouvent dans le fichier [`tbl_bord_0001_35.xml`](http://www.bdso.gouv.qc.ca/docs-ken/flex/xml/tbl_bord_0001_35.xml).
|
||||
|
||||
```{r}
|
||||
```{r, echo=TRUE}
|
||||
|
||||
```
|
||||
|
||||
|
|
Loading…
Reference in a new issue