一、使用hchinamap包进行做图
总结:该包不能按照经纬度添加标记点,但是可以通过更改数据来自定义,做图简单。
该包做图使用包中的内置的文件,首先通过链接下载文件到本地然后读取再进行做图。
可以对Rdata中Value列的值进行更改换成自己想表达的值,同时可以根据region选择感兴趣的省份进行做图。
#安装包
install.packages("hchinamap")
library(hchinamap)
#首先加载包中自带的数据
load(file.path("chinadf.rda"), verbose = T)
#将其保存为表格后重新读取
write.csv(chinadf,"chinadf.csv")
Rdata <- read.csv("chinadf.csv")
#作图
hchinamap(
name = Rdata$name, # 要绘制的省份或城市
value = Rdata$value, # 要可视化的数据,可以将Rdata中各个省份的value列换成自己想代表的值
width = "100%", # 地图的宽度
height = "400px", # 地图的高度
title = "hchinamap包绘制中国地图", # 地图标题
minColor = "#FAEBD7", # 最小值的颜色
maxColor = "#8B8378", # 最大值的颜色
region = "China" # 要绘制的区域,同时可以选择绘制省份例如“Anhui”
)
二、使用leaflet作图
1、安装R包
install.packages("leaflet")
install.packages("geojsonio")
install.packages("htmlwidgets")
library(leaflet)
library(geojsonio)
library(htmlwidgets)
2、下载地图数据
推荐使用阿里 DataV 数据可视化平台开放出来的地图数据,它来自高德开放平台。可以直接下载json文件保存到本地。如果想下载省份地图可以点击省份然后再下载json文件。
3、作图
1、在leaflet提供的网页中选择感兴趣的地图作为底图
#1、随便选择一个作为底图
leaflet() %>%
addProviderTiles("OpenStreetMap.France")
#2、构建经纬度数据
store <- data.frame(
ID = c("A","B","C"),
lng = c("120.78612","118.83085","104.22043"),
lat = c("41.78964","32.02825","36.61643")
)
store$lng <- as.numeric(store$lng)
store$lat <- as.numeric(store$lat)
#设置标记点类型
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = 'lightgreen'
)
#根据经纬度作图
leaflet(store) %>%
addProviderTiles("OpenStreetMap.France") %>%
addAwesomeMarkers(~lng, ~lat , icon = icons)
#3、添加阿里数据源中的高德地图数据高亮中国(其他国家、省份)
china_map <- geojsonio::geojson_read("中华人民共和国.json", what = "sp") #读取中国地图数据
pal <- colorNumeric("Blues", domain = NULL) #设置地图颜色
leaflet(store) %>%
addProviderTiles("OpenStreetMap.France") %>%
addPolygons(data = china_map, stroke = T, weight = 1, smoothFactor = 1,
fillOpacity = 0.85, fillColor = ~ pal(childrenNum))
addAwesomeMarkers(~lng, ~lat , icon = icons, label = ~ position)
#4、不添加底图,只使用阿里数据源中的高德地图数据(其他国家、省份)
map_plot <- leaflet(store) %>%
addPolygons(data = china_map, stroke = T, weight = 1, smoothFactor = 1,
fillOpacity = 0.85, fillColor = ~ pal(childrenNum))
addAwesomeMarkers(~lng, ~lat , icon = icons, label = ~ position)
map_plot
#导出,目前只查到了导出为html
htmlwidgets::saveWidget(map_plot, file = "map_plot.html", selfcontained = T)
2、在国内的一些瓦片地图中选择感兴趣的地图作为底图(推荐高德,更精确)
#1、使用高德地图瓦片作为底图
leaflet() %>%
addTiles(
urlTemplate = 'https://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
layerId = tileOptions(minZoom = 3, maxZoom = 17),
attribution = NULL)
#2、构建经纬度数据
store <- data.frame(
ID = c("A","B","C"),
lng = c("120.78612","118.83085","104.22043"),
lat = c("41.78964","32.02825","36.61643")
)
store$lng <- as.numeric(store$lng)
store$lat <- as.numeric(store$lat)
#设置标记点类型
icons <- awesomeIcons(
icon = 'ios-close',
iconColor = 'black',
library = 'ion',
markerColor = 'lightgreen'
)
#作图
leaflet(store) %>%
addTiles(
urlTemplate = 'https://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
layerId = tileOptions(minZoom = 3, maxZoom = 17),
attribution = NULL) %>%
addAwesomeMarkers(~lng, ~lat , icon = icons)
#3、添加阿里数据源中的高德地图数据高亮中国(其他国家、省份)
china_map <- geojsonio::geojson_read("中华人民共和国.json", what = "sp")
pal <- colorNumeric("Blues", domain = NULL)
leaflet(store) %>%
addTiles(
urlTemplate = 'https://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
layerId = tileOptions(minZoom = 3, maxZoom = 17),
attribution = NULL) %>%
addPolygons(data = china_map, stroke = T, weight = 1, smoothFactor = 1,
fillOpacity = 0.85, fillColor = ~ pal(childrenNum)) %>%
addAwesomeMarkers(~lng, ~lat , icon = icons)
#4、不使用地图数据只使用阿里数据源中的高德地图数据(其他国家、省份)
leaflet(store) %>%
addPolygons(data = china_map, stroke = T, weight = 1, smoothFactor = 1,
fillOpacity = 0.85, fillColor = ~ pal(childrenNum)) %>%
addAwesomeMarkers(~lng, ~lat , icon = icons)
#导出,目前只查到了导出为html
htmlwidgets::saveWidget(map_plot, file = "map_plot.html", selfcontained = T)
总结:
两个建图方式都各有优缺点,hchinamap包缺点在于不能通过经纬度来添加标记,但是能够通过调整数据来调整每个省份的数据,从而进行展示;leaflet包能够添加多种底图并且能够根据阿里源提供的最新版的底图来展示中国地图,同时能够根据经纬度来添加各种标记点;
参考:
国内常用地图瓦片源地址汇总 - 知乎 (zhihu.com)
R+大地图时代︱ leaflet/leafletCN 动态、交互式绘制地图(遍地代码图)-腾讯云开发者社区-腾讯云 (tencent.com)