前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R-tmap+grid 实现南海小地图的添加

R-tmap+grid 实现南海小地图的添加

作者头像
DataCharm
发布2021-02-22 15:20:11
1.1K0
发布2021-02-22 15:20:11
举报

1 前言

在推出一篇使用R-tmap绘制带有「指北针(compass)」「比例尺(scale bar)」 的教程图文哦,有很多小伙伴私信说“解决了好久没解决的问题,而且绘图语法和ggplot2相似”。能得到类似的回答,我也是很高兴的,最起码帮到了你们,让你们少走我之前走过的坑。同时也有小伙伴提出「能不能将南海九段线单独绘制,并放置在整幅图的右下角?」 起初我在查阅tmap官网时也确实发现了类似功能的绘图函数tm_minimap() 。

但在尝试 多次后始终无法实现。最终使用其他方法实现了该功能,也完美衔接tmap绘图体系。主要涉及到的知识点如下:

  • tmap绘图函数实现主要图层的绘制。
  • grid包实现南海小地图的的添加和位置调整。

2 tmap 绘制主要地图部分

南海小地图绘制

本部分的主要的绘图函数和之前的推文R-tmap绘制带有指北针和比例尺的空间地图 一样,此外,我们添加了单独绘制南海区域(即需要单独绘制的南海部分地图),主要代码如下:

代码语言:javascript
复制
//filename china_nanhai.R

nanhai <- tm_shape(country,xlim = c(107, 125),ylim = c(2.5, 26)) + 
  tm_lines(col="black", lwd = 2) +
  tm_shape(province) +
  tm_fill(col = "lightgrey") + 
  tm_borders("grey60", lwd = 0.8)+
  tm_style("classic") +
# tm_xlab("Longitude",size = 1) +
# tm_ylab("Latitude",size = 1)+
tm_credits("Visualization by DataCharm",size=.7,position = c(0.62, 0.02),fontface = "bold")

可视化结果如下: 使用「classic主题」

这也就是我们需要单独绘制的小地图。

中国地区地图绘制

和前篇推文唯一不同的是,我们限制的经纬度范围,代码不同之处如下:

代码语言:javascript
复制
// filename china_main.R
tm_shape(world, 
         xlim = c(75, 135), 
         ylim = c(15, 55)) + 
  tm_borders("grey40", lwd = 1.5) + 
  tm_grid(labels.size = 1)+ 

我们设置了xlim和ylim的范围。可视化结果如下: 使用「classic主题」

3 grid 包实现南海小地图添加

这里使用了grid包中的viewport() 函数实现该效果,其主要包含的参数设置如下:

  • x:viewport()导出图中心点横坐标x值。
  • y:viewport()导出图中心点纵坐标y值。
  • width: viewport()部分的宽度。
  • height: viewport()部分的长度。

绘制代码如下:

代码语言:javascript
复制
//Filename China_map_with_minimap.R
//@byDataCharm
library(grid)
map_test2 <- tm_shape(world, 
         xlim = c(75, 135), 
         ylim = c(15, 55)) + 
  tm_borders("grey40", lwd = 1.5) + 
  tm_grid(labels.size = 1)+ 
tm_shape(province) +
  tm_fill(col = "lightgrey") + 
  tm_borders("grey60", lwd = 0.8) + 
tm_shape(country) + 
  tm_lines(col="grey20", lwd = 1) + 
tm_shape(city) +
   tm_text("city", size=0.5)+
#添加比例尺
tm_scale_bar(position=c("left", "bottom"),text.size = 0.5) + 
#添加指北针
tm_compass(type = "arrow", position=c("left", "top"),text.size = 1) +

tm_xlab("Longitude",size = 1) +
tm_ylab("Latitude",size = 1)+
tm_credits("Visualization by DataCharm",size=.6,position = c(0.8, 0.02),fontface = "bold")+
#tm_style("classic")+
tm_style("beaver")+
tm_layout(inner.margins=c(0.01,0.05,0.05,0.05))

nanhai <- tm_shape(country,xlim = c(107, 125),ylim = c(2.5, 26)) + 
  tm_lines(col="black", lwd = 2) +
  tm_shape(province) +
  tm_fill(col = "lightgrey") + 
  tm_borders("grey60", lwd = 0.8) +
  tm_style("beaver")
  #tm_style("classic")

vip_map <- viewport(0.89, 0.3, width = 0.28, height = 0.2)
tmap_mode("plot")
tmap_save(map_test2,filename = "F:\\DataCharm\\学术图表绘制\\R-ggplot2\\map charts\\china_map_with_nh3.png",
          width = 8,height = 7,dpi = 900, insets_tm = nanhai,
          insets_vp = vip_map)

「知识点」

先看下tmap_save()函数的官网解释如下:

重点看下红框中的参数,官网解释如下:

再看下我们保存图片的代码:

代码语言:javascript
复制
tmap_save(map_test2,filename = "F:\\DataCharm\\学术图表绘制\\R-ggplot2\\map charts\\china_map_with_nh3.png",
          width = 8,height = 7,dpi = 900, insets_tm = nanhai,
          insets_vp = vip_map)

具体结合上述代码即可。若直接打印出来,则使用如下代码:

代码语言:javascript
复制
library(grid)

map_test2
map_combin = print(nanhai, vp = viewport(0.82, 0.34, width = 0.25, height = 0.18))

最终添加南海小地图的结果如下:

其他主题的结果如下:

4 其他绘图包 cartography

大部分的空间地图可视化的绘制tmap包都可以实现,大家自行掌握就可以,这一部分我们再给大家推荐个功能强的R空间地图绘图包cartography 。这个包最吸引我的一点如下图中圆框所示,当然也是可以添加 指北针和比例尺的哦:

其他优秀的例子可以 直接去官网进行查看cartography当然,如果需求较多的化,我后期也会专门推出相应教程进行推文讲解。

5 总结

本期推文我们讲解了使用grid包结合tmap包进行南海小地图(minimap)的添加,当然类似的地图添加组合都是可以的。此外,我们大致介绍了另一个绘制空间地图强大的R包cartography。希望大家可以掌握技巧并尝试使用其他包进行绘制。能力有限,大家可以进群讨论交流哦,偷偷告诉你,群里的大牛是真多哦

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 前言
  • 2 tmap 绘制主要地图部分
    • 南海小地图绘制
      • 中国地区地图绘制
      • 3 grid 包实现南海小地图添加
      • 4 其他绘图包 cartography
      • 5 总结
      相关产品与服务
      灰盒安全测试
      腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档