J'ai lu un article sur les cartes interactives avec R en utilisant le leaflet
package.
Dans cet article, l'auteur a créé une carte thermique comme celle-ci:
X=cbind(lng,lat)
kde2d <- bkde2D(X, bandwidth=c(bw.ucv(X[,1]),bw.ucv(X[,2])))
x=kde2d$x1
y=kde2d$x2
z=kde2d$fhat
CL=contourLines(x , y , z)
m = leaflet() %>% addTiles()
m %>% addPolygons(CL[[5]]$x,CL[[5]]$y,fillColor = "red", stroke = FALSE)
Je ne connais pas la bkde2D
fonction, je me demande donc si ce code pourrait être généralisé à des fichiers de formes?
Et si chaque nœud avait un poids spécifique, que nous aimerions représenter sur la carte thermique?
Y a-t-il d'autres façons de créer une carte thermique avec une leaflet
carte en R?
Réponses:
Voici mon approche pour faire une carte de chaleur plus généralisée dans Leaflet en utilisant R. Cette approche utilise
contourLines
, comme le blog mentionné précédemment, mais j'utiliselapply
pour parcourir tous les résultats et les convertir en polygones généraux. Dans l'exemple précédent, c'est à l'utilisateur de tracer individuellement chaque polygone, donc j'appellerais cela "plus généralisé" (du moins c'est la généralisation que je voulais quand j'ai lu le billet de blog!).Voici ce que vous aurez à ce stade:
Et voici à quoi ressemblerait la carte de chaleur avec des points:
Voici un domaine qui me suggère que je dois régler certains paramètres ou peut-être utiliser un noyau différent:
la source
bandwidth
dansbkde2d()
?MASS::bandwidth.nrd(dat$latitude)
etMASS::bandwidth.nrd(dat$longitude)
comme point de départ. Voir la?MASS::kde2d
documentation qui renvoie àbandwith.nrd
. Vérifiez également?KernSmooth::dpik
si vous êtes intéressé par une autre approche.gridsize = c(100,100)
cela signifie-t-il qu'il y a au total 10 000 cellules?En s'appuyant sur la réponse de genorama ci-dessus, vous pouvez également convertir la sortie de bkde2D en raster plutôt qu'en lignes de contour, en utilisant les valeurs fhat comme valeurs de cellule raster
Ceci est votre résultat. Notez que les valeurs de faible densité apparaissent toujours comme colorées dans le raster.
Nous pouvons supprimer ces cellules de faible densité avec les éléments suivants:
Désormais, toute cellule raster d'une valeur inférieure à 1 est transparente.
Si vous souhaitez un raster groupé, utilisez la fonction colorBin plutôt que la fonction colorNumeric:
Pour le rendre plus fluide, augmentez simplement la taille de la grille dans la fonction bkde2D. Cela augmente la résolution du raster généré. (Je l'ai changé en
Production:
la source
Un moyen simple de créer des cartes de chaleur Leaflet dans R est d'utiliser le plugin Leaflet.heat . Un excellent guide sur la façon de l'utiliser peut être trouvé ici . J'espère que vous le trouverez utile.
la source