做地图可视化,你是不是经常对着空白屏幕发呆?
数据有了,坐标有了,就是画不出好看的图。
这篇教你如何用r语言进行geo分析,搞定那些让人头秃的空间数据。
别去啃那些厚重的英文文档了。
直接看这里,全是干货。
第一步,先把环境搭好。
R语言本身不带处理地图的功能。
你得装包。
推荐用sf包,它比老牌的sp包好用太多。
打开Rstudio,输入install.packages("sf")。
如果安装失败,别慌。
去CRAN镜像里选个近的。
或者试试安装系统依赖库。
这一步很关键,地基打不好,楼盖不高。
装完记得library(sf)加载一下。
看到没有报错,才算成功。
第二步,找对数据源。
很多人卡在这一步。
不知道去哪下地图数据。
推荐去Natural Earth下载。
那里有全球的基础地理数据。
下载下来通常是shp格式。
或者GeoJSON格式。
现在更流行用GeoJSON。
因为读取速度快,结构清晰。
用st_read()函数读取数据。
比如读取一个国家的边界文件。
print一下看看结构。
确保经纬度坐标系是对的。
WGS84坐标系是通用的。
如果你的数据是别的坐标系。
记得用st_transform()转换一下。
不然画出来位置全是错的。
第三步,开始绘图。
别一上来就用ggplot2。
先试试简单的plot。
st_plot()一下看看效果。
确认数据没问题。
再上ggplot2。
geom_sf()是关键函数。
它专门处理空间数据。
不用像以前那样搞复杂的投影转换。
直接映射x和y。
或者用aes()指定填充颜色。
比如按人口密度上色。
数据里得有对应的列。
如果没有,先用dplyr处理一下。
mutate()加个新列。
计算一下密度。
然后画图。
geom_sf(aes(fill = population_density))。
简单粗暴。
加上theme_minimal()。
去掉那些花里胡哨的边框。
地图瞬间清爽很多。
第四步,加点细节。
纯色的地图太单调。
加个图例。
scale_fill_viridis_c()。
这个配色方案对色盲友好。
而且渐变效果很高级。
加上标题。
labs(title = "某某地区人口分布图")。
把字体调大一点。
确保打印出来也清晰。
如果你要做动态地图。
那就得用gganimate包。
把时间变量映射进去。
transition_time()。
让地图动起来。
效果炸裂。
但是要注意性能。
数据量大的时候会卡。
先小范围测试。
再全量跑。
常见问题排查。
画出来的地图是空的。
检查坐标系。
是不是投影不对。
数据范围太大。
导致局部细节看不见。
用st_crop()裁剪一下。
只画你关心的区域。
颜色不对劲。
检查数据列的类型。
是不是因子型。
还是数值型。
处理逻辑不一样。
因子型是分类。
数值型是连续。
选错尺度。
颜色就乱了。
最后,分享几个常用技巧。
合并多个图层。
用+号连接。
就像拼积木一样。
叠加卫星底图。
用ggmap包。
获取OSM底图。
叠加你的分析结果。
对比效果很明显。
保存高清图片。
ggsave()。
设置dpi为300。
导出为pdf或png。
方便插入论文或报告。
记住,地图不仅是展示。
更是分析工具。
通过空间分析。
你能发现隐藏的模式。
比如聚类。
比如热点区域。
用sf包做缓冲区分析。
st_buffer()。
看看某个点周围的影响范围。
这些才是geo分析的核心。
别只停留在画图层面。
深入挖掘数据背后的故事。
希望这篇教程能帮你省下熬夜的时间。
照着步骤做。
遇到问题去查文档。
sf包的文档写得很好。
英文好的直接看官方wiki。
有问题去Stack Overflow搜。
关键词加上sf。
基本都能找到答案。
别再问怎么画地图了。
动手试试吧。
你的第一张空间分析图。
可能就在下一秒诞生。
加油,程序员。