如何在ggmap中结合geom_raster绘制平滑热力等高线图?
解决ggmap与ggplot图层叠加的错误问题
这个问题我之前也碰到过,核心是你搞错了ggmap和ggplot图层的组合逻辑:ggmap(fr)本身就已经是一个ggplot对象了,你后面再加上ggplot(idw.output, ...)相当于试图把两个独立的ggplot对象强行叠加,这就触发了Don't know how to add o to a plot的错误。
修正后的正确代码
你只需要把ggmap作为基础图层,然后直接在后面叠加你需要的geom_raster、geom_contour等图层即可,不需要再重新调用ggplot():
# 先加载ggmap作为基础图层,然后直接叠加后续元素 ggmap(fr) + aes(x = lon, y = lat, z = var1.pred, fill = var1.pred) + geom_raster(alpha = 0.5) + scale_fill_gradient(low = "white", high = "blue") + geom_contour(colour = "white", binwidth = 1) + labs(fill = "Frequency", title = "Frequency per area", x = 'Longitude', y = 'Latitude')
额外优化建议
如果你想要更平滑的填充效果,同时避免栅格文件过大的问题,推荐用stat_contour_fill()替代geom_raster+geom_contour,它可以直接生成平滑的填充等高线,不需要依赖栅格数据:
ggmap(fr) + aes(x = lon, y = lat, z = var1.pred) + stat_contour_fill(binwidth = 1, alpha = 0.5) + scale_fill_gradient(low = "white", high = "blue") + geom_contour(colour = "white", binwidth = 1) + labs(fill = "Frequency", title = "Frequency per area", x = 'Longitude', y = 'Latitude')
注意事项
- 确保你的
idw.output数据框中的经纬度范围和fr地图的范围匹配,否则图层可能显示不出来 - 调整
alpha值可以控制叠加图层的透明度,让底图和等高线效果更协调
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

