Ich habe mit dem Paket einen Beitrag über interaktive Karten mit R gelesen leaflet
.
In diesem Artikel hat der Autor eine Heatmap wie folgt erstellt:
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)
Ich bin mit der bkde2D
Funktion nicht vertraut und frage mich, ob dieser Code auf Shapefiles verallgemeinert werden kann.
Was ist, wenn jeder Knoten ein bestimmtes Gewicht hat, das wir auf der Heatmap darstellen möchten?
Gibt es andere Möglichkeiten, eine Heatmap mit leaflet
Map in R zu erstellen ?
Antworten:
Hier ist mein Ansatz zum Erstellen einer allgemeineren Heatmap in Leaflet mit R. Dieser Ansatz verwendet
contourLines
wie der zuvor erwähnte Blog-Beitrag, aber ichlapply
iteriere über alle Ergebnisse und konvertiere sie in allgemeine Polygone. Im vorherigen Beispiel ist es Sache des Benutzers, jedes Polygon einzeln zu zeichnen, daher würde ich dies als "allgemeiner" bezeichnen (zumindest ist dies die Generalisierung, die ich beim Lesen des Blogposts wollte!).Folgendes haben Sie an dieser Stelle:
Und so würde die Heatmap mit Punkten aussehen:
Hier ist ein Bereich, der mir vorschlägt, dass ich einige Parameter optimieren oder vielleicht einen anderen Kernel verwenden muss:
quelle
bandwidth
in ausgewähltbkde2d()
?MASS::bandwidth.nrd(dat$latitude)
undMASS::bandwidth.nrd(dat$longitude)
als Ausgangspunkt verwendet. Siehe?MASS::kde2d
Dokumentation, auf die verwiesen wirdbandwith.nrd
. Sehen?KernSmooth::dpik
Sie auch nach, ob Sie an einem anderen Ansatz interessiert sind.gridsize = c(100,100)
bedeutet, dass es insgesamt 10.000 Zellen gibt?Aufbauend auf der obigen Antwort von genorama können Sie auch die Ausgabe von bkde2D in ein Raster anstatt in Konturlinien konvertieren, wobei Sie die fhat-Werte als Rasterzellenwerte verwenden
Dies ist Ihre Ausgabe. Beachten Sie, dass die Werte mit niedriger Dichte im Raster immer noch farbig angezeigt werden.
Wir können diese Zellen mit niedriger Dichte folgendermaßen entfernen:
Jetzt ist jede Rasterzelle mit einem Wert von weniger als 1 transparent.
Wenn Sie ein gruppiertes Raster möchten, verwenden Sie die Funktion colorBin anstelle der Funktion colorNumeric:
Um es glatter zu machen, erhöhen Sie einfach die Rastergröße in der bkde2D-Funktion. Dies erhöht die Auflösung des generierten Rasters. (Ich habe es geändert in
Ausgabe:
quelle
Eine einfache Möglichkeit, Leaflet- Heatmaps in R zu erstellen, ist das Leaflet.heat- Plugin. Eine ausgezeichnete Anleitung zur Verwendung finden Sie hier . Ich hoffe, Sie finden es nützlich.
quelle