前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何绘制省市级地图?

如何绘制省市级地图?

作者头像
庄闪闪
发布2022-02-16 21:18:25
2.6K0
发布2022-02-16 21:18:25
举报

简介

关于地理地图绘制已经由师弟师妹系统出了几期。具体推文可见:

网上有很多关于中国地图绘制教程,但是关于省市级地图绘制非常少,本推文就是来解决这个问题。下面推文主要以浙江省、温州市为例,使用 leaflet 包绘制省/市级地图。

绘制省级地图

首先,使用 regionNames()导入浙江省各市的名字。dem_data 可以是读者想要填充在地图上的数据(例如:各市的 GDP,空气质量指数等数据)。使用 leafletGeo() 创建一个 sp 对象的数据框。

注意:这里的 dem_data 可以是连续型或离散型变量(各市 GDP 排名),以下例子使用 runif() 随机生成连续型数据。

代码语言:javascript
复制
library(leaflet) #加载包
library(leafletCN)
region = regionNames("浙江")
dem_data = runif(length(region)) # 这里使用自己的数据
dat = data.frame(region,dem_data)
map = leafletGeo("浙江", dat)

构建好数据集之后,进行绘图。载入高德地图 amap,设置各市边界及颜色并加入图例,得到以下 html 形式图形。

代码语言:javascript
复制
#涂色环节
pal <- colorNumeric(
  palette = "Blues",
  domain = map$value)

#载入高德地图amap
leaflet(map) %>% amap() %>%
  #加入框边界及颜色
  addPolygons(stroke = TRUE,
              smoothFactor = 2,
              fillOpacity = 0.7,
              weight = 1,
              color = ~pal(value),
              popup = ~htmltools::htmlEscape(popup)
  ) %>%
  #加入右下角边框
  addLegend("bottomright", pal = pal, values = ~value,
            title = "legendTitle",
            labFormat = leaflet::labelFormat(prefix = ""),
            opacity = 1)

由于小编能力有限,下面的图是通过 ppt 手动添加的文字(涂色换成palette = "Greens",数据来自真实数据,其他代码相同),然后应用到自己的论文中。如果你要发表到英文期刊,建议图内不要出现中文。

绘制市级地图

绘制市级地图与绘制省级地图类似,只需在regionNames()中进行变化即可,其他几乎相同。下面绘制的温州市地图做了一些小小的拓展。1. 使用真实案例数据;2. 填充颜色变化。数据处理方面主要是用 dplyr 包的 full_join(),具体细节就不做过多介绍了。

代码语言:javascript
复制
#===============================================================
#======================== 温州市地图绘制 =======================
#===============================================================


library(leafletCN)
library(dplyr)
library(leaflet)
#demomap("温州")


#主函数——geojsonmap:地图标色函数  
data = read.csv("各区县经营效率.csv",header=T)
data$mean = apply(data[,2:13],1,mean)
colnames(data) = c('region',as.character(2009:2020),"mean")
dim(data)
region = regionNames("温州市")
dat = data.frame(region,runif(length(region)))
data1 = full_join(dat,data[,c(1,8)])
data2 = data1[,-2]
map = leafletGeo("温州市", data2)

#涂色环节heat.colors(6,rev = T)
# c("#FFFF00FF","#FF0000FF","#00FF00FF","#00FFFFFF","#FF00FFFF","#0000FFFF")
pal <- colorNumeric(
palette = c("purple","blue","lightblue","green","yellow","orange",'red'),
domain = map$value)

#载入高德地图amap
leaflet(map) %>% amap() %>%
#加入框边界及颜色
    addPolygons(stroke = TRUE,
                smoothFactor = 1,
                fillOpacity = 1,
                weight = 1,
                color = ~pal(value),
                popup = ~htmltools::htmlEscape(popup)
    ) %>%
    #加入右下角边框
    addLegend("bottomright", pal = pal, values = ~value,
              title = "效率值",
              labFormat = leaflet::labelFormat(prefix = ""),
              opacity = 2) 

小编有话说

  • 本推文主要介绍,如何使用 leaflet 包绘制省/市级地图并以浙江省、温州市作为案例。读者可以使用函数保存该图片,并将其使用到论文中。
  • 但是本推文的省市级绘图还存在几个问题,小编还没有能力通过代码解决:1. 如何凸显各市/县的名字到填充颜色上方?2. 有些市、县发生变化(从县变为区),但 leaflet 包没有及时更新,应该如何处理?
  • 以上是小编在实际科研中存在的问题,我的“笨”办法是:画图细节不会改?那就用 AI 吧!。或者使用 ppt,手动修改。如果读者们有什么好办法,可以留言分享下,十分感谢。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 庄闪闪的R语言手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 绘制省级地图
  • 绘制市级地图
  • 小编有话说
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档