2014-02-15 3 views
12

Я новичок в анализе пространственных данных в R, и хотел бы сделать что-то просто, я до сих пор возникают трудности ... У меня есть большой стол с latitudes и longitudesКак построить карту тепла на пространственной карте

sample = structure(list(Longitude = c(-0.19117, -0.211708, -0.206458, 
-0.173862, -0.156618), Latitude = c(51.489096, 51.520075, 51.525301, 
51.482442, 51.495752), Location_Easting_OSGR = c(525680L, 524170L, 
524520L, 526900L, 528060L), Location_Northing_OSGR = c(178240L, 
181650L, 182240L, 177530L, 179040L)), .Names = c("Longitude", 
"Latitude", "Location_Easting_OSGR", "Location_Northing_OSGR" 
), row.names = c(NA, -5L), class = c("data.table", "data.frame" 
)) 

У меня есть карта Великобритании от GADM (уровень 2 карты Великобритании).

enter image description here

Я хотел бы быть в состоянии точек

  1. сюжетных определенных долгота/широта на карте
  2. построить тепловую карту, которая показывает, где точки являются более концентрированными ...

Легко ли это? Если у вас нет указателей (только в Великобритании) Cheers

+0

Вы хотите получить карту heaat или карту choropleth? Предыдущие участки или контуры, основанные на концентрации точек. Последний окрасит существующие области карты в зависимости от количества точек в данном регионе. – jlhoward

+0

да jihoward вот что я искал – statquant

ответ

18

Это вы имели в виду?

Ваш sample был слишком мал, чтобы продемонстрировать карту тепла, поэтому я создал более крупный образец с искусственными кластерами в (long, lat) = (-1,52), (-2,54) и (-4,5,56). ИМО карта была бы более информативной без точек.

Кроме того, я загрузил шейп-файл, а не .Rdata и импортировал его. Причина заключается в том, что вы гораздо больше шансов найти шейпфайлы в других проектах, и легко импортировать их в R.

setwd("< directory with all your files>") 
library(rgdal)   # for readOGR(...) 
library(ggplot2) 
library(RColorBrewer) # for brewer.pal(...) 

sample <- data.frame(Longitude=c(-1+rnorm(50,0,.5),-2+rnorm(50,0,0.5),-4.5+rnorm(50,0,.5)), 
        Latitude =c(52+rnorm(50,0,.5),54+rnorm(50,0,0.5),56+rnorm(50,0,.5))) 
UKmap <- readOGR(dsn=".",layer="GBR_adm2") 
map.df <- fortify(UKmap) 

ggplot(sample, aes(x=Longitude, y=Latitude)) + 
    stat_density2d(aes(fill = ..level..), alpha=0.5, geom="polygon")+ 
    geom_point(colour="red")+ 
    geom_path(data=map.df,aes(x=long, y=lat,group=group), colour="grey50")+ 
    scale_fill_gradientn(colours=rev(brewer.pal(7,"Spectral")))+ 
    xlim(-10,+2.5) + 
    coord_fixed() 

Объяснение:

Этот подход использует ggplot пакет, который позволяет создавать слои, а затем отображать карту. Вызовы делают следующее:

ggplot -   establish `sample` as the default dataset and define (Longitude,Latitude) as (x,y) 
stat_density2d - heat map layer; polygons with fill color based on relative frequency of points 
geom_point -  the points 
geom_path -  the map (boundaries of the admin regions) 
scale_fill_gradientn - defines which colors to use for the fill 
xlim -   x-axis limits 
coord_fixed - force aspect ratio = 1, so map is not distorted 
+0

очень приятно !!! спасибо tou очень – statquant

+0

очень хороший у меня есть один вопрос. Если у каждой точки есть другой атрибут, прикрепленный к нему (позволяет предположить, что высота земли), как вы можете воспроизвести одно и то же (что означает ggplot с заполненным контуром высоты земли над пространственным расположением)? Спасибо, и я надеюсь, что мой вопрос будет достаточно ясным – Amir

Смежные вопросы