Eu li um post sobre mapas interativos com R usando o leaflet
pacote.
Neste artigo, o autor cria um mapa de calor como este:
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)
Eu não estou familiarizado com a bkde2D
função, então eu estou querendo saber se esse código pode ser generalizado para qualquer shapefiles?
E se cada nó tiver um peso específico, que gostaríamos de representar no mapa de calor?
Existem outras maneiras de criar um mapa de calor com o leaflet
mapa em R?
Respostas:
Aqui está minha abordagem para criar um mapa de calor mais generalizado no Leaflet usando R. Essa abordagem usa
contourLines
, como a postagem de blog mencionada anteriormente, mas eu usolapply
para iterar todos os resultados e convertê-los em polígonos gerais. No exemplo anterior, cabe ao usuário plotar individualmente cada polígono, então eu chamaria isso de "mais generalizado" (pelo menos essa é a generalização que eu queria quando li a postagem do blog!).Aqui está o que você terá neste momento:
E é assim que o mapa de calor com pontos seria:
Aqui está uma área que me sugere que eu preciso ajustar alguns parâmetros ou talvez usar um kernel diferente:
fonte
bandwidth
inbkde2d()
?MASS::bandwidth.nrd(dat$latitude)
eMASS::bandwidth.nrd(dat$longitude)
como ponto de partida. Consulte a?MASS::kde2d
documentação para a qual está vinculadobandwith.nrd
. Veja também?KernSmooth::dpik
se você está interessado em outra abordagem.gridsize = c(100,100)
isso significa que há um total de 10.000 células?Com base na resposta do genorama acima, você também pode converter a saída do bkde2D em uma varredura em vez de linhas de contorno, usando os valores fhat como os valores das células raster
Esta é a sua saída. Observe que os valores de baixa densidade ainda aparecem como coloridos na varredura.
Podemos remover essas células de baixa densidade com o seguinte:
Agora qualquer célula de varredura com um valor menor que 1 é transparente.
Se você deseja uma varredura em bin, use a função colorBin em vez da função colorNumeric:
Para torná-lo mais suave, basta aumentar o tamanho da grade na função bkde2D. Isso aumenta a resolução da varredura gerada. (Mudei para
Resultado:
fonte
Uma maneira fácil de criar mapas de calor do Leaflet no R é usar o plug- in Leaflet.heat . Um excelente guia sobre como usá-lo pode ser encontrado aqui . Espero que você ache útil.
fonte