Density2d绘图使用另一个填充变量(类似于geom_tile)?

Man*_*l G 8 r ggplot2

我正试图为我的最终项目绘制一张地图,我正试图在美国制作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)

在此输入图像描述