我正试图为我的最终项目绘制一张地图,我正试图在美国制作BLock的犯罪热图.
对于每个街区,我都有Lat,Lon和犯罪率的预测.它遵循以下结构:
Lat / Lon / Prediction
-76.0 / 40.0 / 125
-76.120 / 40.5 / 145
-75.98 / 41.001 / 95
Run Code Online (Sandbox Code Playgroud)
等等.
有没有办法绘制热图,显示预测为填充?
我认为这就是geom_tiles所做的,但是geom不起作用(也许是因为这些点间距不均匀)
任何帮助都非常受欢迎.请!
编辑
这是我到目前为止所尝试的:
-geom_density2d:
ggplot(ny2,aes(x=GEO_CENTROID_LON,y=GEO_CENTROID_LON,fill=prediction))+geom_density2d()
Run Code Online (Sandbox Code Playgroud)
给我错误:"单位错误(tic_pos.c,"mm"):'x'和'units'必须长度> 0"
-geom_tiles:
ggplot(ny2,aes(x=GEO_CENTROID_LON,y=GEO_CENTROID_LON,fill=prediction))+geom_tile()
Run Code Online (Sandbox Code Playgroud)
生成具有适当比例的绘图,但不生成地图上显示的数据.
关于chloropeth,如果我发生整个美国的块级信息,它会工作,但我找不到这样的数据.
可以在此处找到数据的SUBSAMPLE
And*_*ton 27
首先,让我们加载数据:
data<-read.csv(file = "NY subsample.csv")
Run Code Online (Sandbox Code Playgroud)
然后,让我们尝试绘制数据的基本位置和值:
require('ggplot2')
# start with points
pred.points <- ggplot(data = data,
aes(x = GEO_CENTROID_LON,
y = GEO_CENTROID_LAT,
colour = prediction)) +
geom_point()
print(pred.points)
ggsave(filename = "NYSubsamplePredPoints.png",
plot = p2,
scale = 1,
width = 5, height = 3,
dpi = 300)
Run Code Online (Sandbox Code Playgroud)
这给了我们这个:

然后,您可以尝试使用以下方法绘制二维区域中的均值stat_summary2d():
pred.stat <- ggplot(data = data,
aes(x = GEO_CENTROID_LON,
y = GEO_CENTROID_LAT,
z = prediction)) +
stat_summary2d(fun = mean)
print(pred.stat)
ggsave(filename = "NYSubsamplePredStat.png",
plot = pred.stat,
scale = 1,
width = 5, height = 3,
dpi = 300)
Run Code Online (Sandbox Code Playgroud)
这给了我们每个方框中预测平均值的这个图.

接下来,我们可以设置bin大小,颜色比例,并修复投影:
# refine breaks and palette ----
require('RColorBrewer')
YlOrBr <- c("#FFFFD4", "#FED98E", "#FE9929", "#D95F0E", "#993404")
pred.stat.bin.width <- ggplot(data = data,
aes(x = GEO_CENTROID_LON,
y = GEO_CENTROID_LAT,
z = prediction)) +
stat_summary2d(fun = median, binwidth = c(.05, .05)) +
scale_fill_gradientn(name = "Median",
colours = YlOrBr,
space = "Lab") +
coord_map()
print(pred.stat.bin.width)
ggsave(filename = "NYSubsamplePredStatBinWidth.png",
plot = pred.stat.bin.width,
scale = 1,
width = 5, height = 3,
dpi = 300)
Run Code Online (Sandbox Code Playgroud)
这给了我们这个:

最后,这里的数据覆盖在地图上.
require('ggmap')
map.in <- get_map(location = c(min(data$GEO_CENTROID_LON),
min(data$GEO_CENTROID_LAT),
max(data$GEO_CENTROID_LON),
max(data$GEO_CENTROID_LAT)),
source = "osm")
theme_set(theme_bw(base_size = 8))
pred.stat.map <- ggmap(map.in) %+% data +
aes(x = GEO_CENTROID_LON,
y = GEO_CENTROID_LAT,
z = prediction) +
stat_summary2d(fun = median,
binwidth = c(.05, .05),
alpha = 0.5) +
scale_fill_gradientn(name = "Median",
colours = YlOrBr,
space = "Lab") +
labs(x = "Longitude",
y = "Latitude") +
coord_map()
print(pred.stat.map)
ggsave(filename = "NYSubsamplePredStatMap.png",
plot = pred.stat.map,
scale = 1,
width = 5, height = 3,
dpi = 300)
Run Code Online (Sandbox Code Playgroud)

最后,要将colormap设置为http://www.cadmaps.com/images/HeatMapImage.jpg,我们可以猜测colormap:
colormap <- c("Violet","Blue","Green","Yellow","Red","White")
Run Code Online (Sandbox Code Playgroud)
并再次进行绘图:
pred.stat.map.final <- ggmap(map.in) %+% data +
aes(x = GEO_CENTROID_LON,
y = GEO_CENTROID_LAT,
z = prediction) +
stat_summary2d(fun = median,
binwidth = c(.05, .05),
alpha = 1.0) +
scale_fill_gradientn(name = "Median",
colours = colormap,
space = "Lab") +
labs(x = "Longitude",
y = "Latitude") +
coord_map()
print(pred.stat.map.final)
Run Code Online (Sandbox Code Playgroud)
