6

我想在 ggmap 上绘制热图。

  library(ggmap)
  turku<-get_map('turku', zoom=13)
  turkumap<-ggmap(turku, extent="device", legend="topleft")
  turkumap
  turkumap+geom_density2d(mapping=aes(x = lon, y = lat),data = test, )

我得到的错误是:

 Error in (function (x, y, h, n = 25, lims = c(range(x), range(y)))  : 
 bandwidths must be strictly positive

测试变量为:

  test
         lon     lat var1.pred
  1  22.25320 60.4314 -67.04862
  2  22.25332 60.4314 -67.07793
  3  22.25344 60.4314 -67.11007
  4  22.25356 60.4314 -67.14517
  5  22.25368 60.4314 -67.18336
  6  22.25379 60.4314 -67.22478 
  7  22.25391 60.4314 -67.26956
  8  22.25403 60.4314 -67.31783
  9  22.25415 60.4314 -67.36973
  10 22.25427 60.4314 -67.42537

建议?变量 test 有更多条目,我要绘制的是 kriging 的结果,通过 gstat 库中的函数 krige 获得。

有更好的方法吗?

我对非常不同的解决方案持开放态度

4

1 回答 1

6

您遇到的问题是这些lat值都是相同的。这意味着lat方向上的方差为零,因此无法计算内核密度估计的带宽

您可以硬编码带宽,

turkumap + geom_density2d(mapping=aes(x = lon, y = lat),
                 data = test, h=0.01)

但在你的情况下,我建议不要geom_density2d用于这个特定的数据集。也许只是绘制点?

于 2013-09-19T08:33:54.027 回答