Carte leaflet

Pour la création des cartes interactives, le package leaflet disponible sur R.

Le code ci dessous permet de séparer le dataframe en plusieurs dataframe par département et ainsi les stocker dans une liste.

#Itération pour les ggplots par départements.
#Dataframe pour chaque département.
list_dept = split(vac_dept1, vac_dept1$dep)

Création d’une boucle qui a pour but de créer un barplot pour chacun des dataframe précédemment créé. L’objectif est d’inclure chaque graphique correspondant aux départements et de les ajouter en pop-up sur la représentation cartographique.

#Création de plot pour chaque département et les ajouter dans les box.
result = list()

for(i in 1:length(list_dept)){
  a <- as.data.frame(list_dept[[i]]) %>%
    ggplot(aes(x=vaccin,y=n_tot_dose1, color=vaccin))+ geom_bar(stat="identity", fill="grey",alpha=0.5) +
    scale_color_brewer(palette="YlGn") + theme_minimal() + theme(legend.position="none")+
         labs(x="Type de vaccin", y=NULL,
                                        title ="Nombre de vaccination par type de vaccin",
              subtitle = "Nombre cumulé au 28/02/21, en France métropolitaine")
  result[[i]]=a
}

Carte à base d’aplat.

Les cartes à base d’aplat permettent de representer des variables quantitatives par région ou département. Pour ce faire, la fonction addPolygons sera la plus commune et donc la plus utilisée.

Le code ci-dessous permet d’intégrer les popups ou les labels lorsque l’on clique ou passe la souris sur les départements.

# Quand on clique sur le département, la box d'information qui apparaît.
boxdose1 <- paste0('Département : ', carto$NAME_2)

box_part_vacc <- paste0('<strong> Département : </strong> ', carto$NAME_2,'<br/>',
                              '<strong> Part de la population partiellement vaccinée : </strong>',
                        carto$part_vacc,'% <br/>')

palette_dose1=colorNumeric(palette = "YlGn",
                           domain = carto$`tous vaccins dose1`)
palette_part_vacc=colorNumeric(palette = "OrRd", domain = carto$part_vacc)

Introduction du dataframe que l’on a préalablement transformé les données en objet sf à l’aide du package sf. Le leafletOptions() permet ici de bloquer le zoom, pour mieux le contrôler et rendre l’utilisation de la carte plus agréable.

leaf <- leaflet(carto, 
options = leafletOptions(zoomControl = TRUE,
                                 minZoom = 4, maxZoom = 6)) 

On peut voir qu’en effet grâce à popupGraph inclure notre liste de graphiques. On peut également inclure des tableaux, des images ou comme ici des graphiques.

leaf <- leaf %>%
  addPolygons(opacity = 100,color = "black",weight = 0.25,
        options = list(clickable = FALSE), 
                 fill = T,
              fillColor = ~palette_dose1(carto$`tous vaccins dose1`), 
                 fillOpacity = 0.8, group="Nombre de vaccinés",
        label=boxdose1,
        popup = popupGraph(result, width = 300, height = 200)
              )%>%
 addLegend("bottomleft",
           pal = palette_dose1, values = carto$`tous vaccins dose1`,
            group="Nombre de vaccinés",
           title = "Nombre de première dose injectée"
            )%>%
  addPolygons(opacity = 100, 
                 color = "black", 
                 weight = 0.25,
                 options = list(clickable = FALSE), 
                 fill = T,
              fillColor = ~palette_part_vacc(carto$part_vacc), 
                 fillOpacity = 0.8, group="Part de vaccinés",
              popup=box_part_vacc
              )%>% 
  addLegend("bottomleft", pal = palette_part_vacc, values = carto$part_vacc,
            group="Part de vaccinés",
            title = "Population partiellement vaccinée (%)") 

On utilise la fonction addLayersControl intégrée à Leaflet pour permettre aux utilisateurs de choisir l’une des nombreuses couches de base, les deux en l’occurence, et de choisir le nombre de couches superposées à afficher. HideGroup, permet de noter les groupes que nous ne voulons pas afficher lors de l’ouverture de la carte.

leaf <- leaf %>%
  addLayersControl(overlayGroups=c("Nombre de vaccinés","Part de vaccinés"),
                    position = "bottomright",
                    options =layersControlOptions(collapsed =FALSE))%>%
  hideGroup(c("Part de vaccinés"))

Carte avec des coordonnées de point.

On appellera plutôt la fonction addMarkers() qui reconnaîtra directement les coordonnées des points à afficher dans l’objet sf.

La fonction makeIcon permet de personnaliser les markers, leurs couleurs mais aussi leurs formes à l’aide d’images png.

# Créer les icones noires
MarkerIcon <-makeIcon("marker-icon-black.png", "marker-icon-2x-black.png", 20, 30)

iconCreateFunction permet avec un code Javascript de personnaliser les clusters, leurs couleurs, l’intervalle entre chaque cluster. Il est à insérer dans l’option markerClusterOption.

#icon Create function : créer les cluster avec les couleurs Mécen.
#Popup : boxinfo pour insérer les infos.
leaflet <- leaflet(
options = leafletOptions(
            attributionControl=FALSE)) %>% addTiles()%>%
    addMarkers(data = centres_vaccination,
               lng =   centres_vaccination$long_coor1,
               lat =   centres_vaccination$lat_coor1,icon=MarkerIcon_vac, 
    clusterOptions = markerClusterOptions(iconCreateFunction=JS(
    "function (cluster) {var childCount = cluster.getChildCount();  
    if (childCount < 50) {  
      c = 'rgba(168, 238, 160, 1.0);'
    } else if (childCount < 100) {  
      c = 'rgba(126, 179, 120, 1);'  
    } else { 
      c = 'rgba(59, 93, 55, 1);'  
    }    
    return new L.DivIcon({ html: '<div style=\"background-color:'+c+'\"><span>' +
    childCount + '</span></div>',
    className: 'marker-cluster',
    iconSize: new L.Point(40, 40) });}")), 
    popup = boxinfovac, popupOptions=list(maxHeight=100, maxWidth=300), group = "Centre de vaccination") 
leaflet <- leaflet %>% 
    addMarkers(data=sites_prelev ,
               lng =   sites_prelev$longitude, 
               
               lat =   sites_prelev$latitude,
               icon=MarkerIcon,
    clusterOptions = markerClusterOptions(iconCreateFunction=JS(
    "function (cluster) {var childCount = cluster.getChildCount();  
    if (childCount < 50) {  
      c = 'rgba(164, 194, 209, 1.0);'
    } else if (childCount < 100) {  
      c = 'rgba(118, 141, 152, 1);'  
    } else { 
      c = 'rgba(41, 67, 80, 1);'  
    }    
    return new L.DivIcon({ html: '<div style=\"background-color:'+c+'\"><span>' +
    childCount +
    '</span></div>',
    className: 'marker-cluster',
    iconSize: new L.Point(40, 40) });}")),
    
    popup = boxinfo, popupOptions=list(maxHeight=100, maxWidth=300) ,group = "Centre de prélèvement") %>%
  addLayersControl(overlayGroups=c("Centre de prélèvement","Centre de vaccination"),
                   position = "bottomright",
                   options =layersControlOptions(collapsed = FALSE)) %>%
  hideGroup(c("Centre de prélèvement"))

Footnotes