基于邮政编码在R中绘制热力图

8

我想在R中绘制热图,但我的数据文件是这样的

Lat, Long, Zip, Zvalue

我基本上需要在纬度和经度值之间进行插值,并根据z值绘制颜色

我该如何在R中实现这一点?

最终,我想得到这样的结果

enter image description here


如果您拥有纬度和经度数据,那么邮政编码是否无关紧要? - Mike Dewar
是的,我可以使用邮政编码或纬度/经度数据。 - Mark
这个问题是否有好的解决方案?这些包相当复杂...你解决了吗? - Doc
3个回答

4

spatstat是你的朋友!

http://www.spatstat.org/spatstat/

如果您的数据是一组事件(例如“在(x,y)发生了一起犯罪”),那么您可以使用核密度估计生成热力图。您可以在此处查看示例:

https://github.com/drewconway/WikiLeaks_Analysis/blob/master/density.r

具体来说,是第72行。

如果您的z值是实数(根据您的问题可能是这种情况),则可以使用spatstat的smooth函数进行插值,并返回一组由数据插值生成的像素。该函数使用高斯核进行插值。

另外,您还可以使用akima包(由spatstat作者推荐)对指定位置进行插值。它使用线性或基于样条的插值方法,似乎相当简单(尽管我没有使用过!)。

更一般地说,您正在尝试做的事情通常称为“克里金插值”,因此如果您在谷歌上搜索此内容,将会得到很多结果。例如,请参阅gstatgeoR包。

最后(也是非常重要的),您可以使用高斯过程来完成类似的操作。这实际上会给出一个关于可能插值的分布,考虑到您的数据。R软件包kernlab有一个实现,但我不知道如何使用它。


3

但它甚至不是一个热力图,在最好的情况下,它是一个区域地图。我想知道是否有任何函数/软件包可以自动执行插值。 - Mark

2
您可以查看 ggplot 案例研究比赛的获胜者的代码 {{link1:此处}}
作者使用了 geom_tile 制作了一个热力图,图表标题为:休斯顿市中心暴力犯罪天气地图

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接