制作地图有很多方法,每个方法采用的包都各有不同,思路也不同
这里我采用以下方法,因为对我来说,这个思路最好理解
(1)去浏览器下载你制作对象的地图文件【河南省地图的经纬度数据,也就是shapefile格式(只需知道这是装经纬度数据的文件即可)的数据,具体操作在下面】
常见问题:
(2)安装相应的包(sf包是R语言中处理地理空间数据的现代方法),读取地图的数据
①安装Rtools(安装sf包,应该需要先下载Rtools)
https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/
在这里安装和自己版本一致的Rtools
选择点击蓝色加深部分,进行下载
# 安装完之后,在R运行以下代码
writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron")
# !!!重启R语言之后输入
Sys.which("make")
#如果环境配置成功,会有下述类似信息
# make
# "D:\\R-44~1.1\\rtools44\\usr\\bin\\make.exe"
# 上面两步运行成功,就测试下能不能通过以下方式安装包
install.packages("jsonlite", type = "source")
# 运行成功,就说明配置成功
②安装sf包
# install.packages("sf")
# library(sf)
# 如果以上代码不可行的话,用这个网址 https://cran.r-project.org/web/packages/sf/index.html (r-release: sf_1.0-18.zip)
# 下载完成后,在R中输入以下代码(第一个参数填zip的地址):
install.packages("D:\\R-4.4.1\\sf_1.0-18.zip", repos = NULL, type = "win.binary")
library(sf)
# Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
# 出现以上信息就是安装成功了
③ 读取地图数据
这里我是通过https://hxkj.vip/demo/echartsMap/这个网址下载的河南省地图,下载的geoJson数据
然后通过https://mapshaper.org/这个网址转化为 shapefile格式
把geoJson数据复制过来或者拖过来
下载好这个压缩包,解压,然后在下面输入这个文件的绝对路径
Henan_map <- read_sf("D:\\R-4.4.1\\Henan")
(3)绘制地图(看一下是否能输出地图)
install.packages("ggplot2")
library(ggplot2)
ggplot() +
geom_sf(data = Henan_map) +
theme_void() # 使用空白主题以避免不必要的图形元素
(4)连接地图热图所需数据
# dplyr提供了一组方便易用的函数用于数据框的快速操作(用于将热图所需数据和地图数据合并)
install.packages("dplyr")
library(dplyr)
# 热图所需数据(各市的2022年人均GDP数据)
henangdp_data <- data.frame(
region_name = c("郑州市", "洛阳市", "开封市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市", "济源市"),
value = c(101169, 56075, 80226, 57193, 46350, 70422, 56156, 63434, 50475, 85515, 76493, 82276, 47344, 42227, 51752, 40951, 47136, 110517)
)
henangdp_data
merged_data <- left_join(Henan_map, henangdp_data, by = c("name" = "region_name"))
merged_data
(5)制作热图
henanmap <- ggplot() +
geom_sf(data = merged_data, aes(fill = value)) +
scale_fill_gradient(low = "#fff0f5", high = "#ff69b4", name = "人均GDP") + # 设置颜色梯度及图例标题
theme_void() +
ggtitle("河南省人均GDP热图") # 添加图表标题
print(henanmap)