R语言地理空间分析(二)制图

sf对象和sp对象都有自己的绘图函数plot(),但此函数只能实现一些简单的功能,达不到制图的要求,为了地图的美观可以运用tmap

基础知识

tmap的说明文档tmap可以识别spsfraster对象。
tmap包画图的基本函数是tm_shape(),用于确定输入的空间数据,后面+一系列美化地图的函数,如tm_polygons()用于画面属性数据,tm_dots()用于画点属性数据,tm_line()用于画线属性数据,还有tm_fill()tm_legend()函数分别用于填充和图例的设置,更多的函数可以用help("tmap-element")查找

#tm_fill()用Name属性填充,下图左
tm<-tm_shape(data)+tm_fill("Name")
#tm_polygons()画面属性,tm_borders()控制面属性边界,tm_lengend()控制图例,下图中
tm1<-tm_shape(data)+tm_polygons("Name")+tm_borders()+tm_legend(outside=TRUE)
#两张图叠加,下图右
tm2<-tm_shape(data)+tm_polygons()+tm_borders()+tm_legend(outside=TRUE)+
  tm_shape(point)+tm_dots("green",size = 0.5)

图的美化函数

以下函数都有colalphalwdlty参数用来调节颜色,透明度,线条宽度和线条类型

tm1<-tm_shape(data)+tm_fill(col = "red")
tm2<-tm_shape(data)+tm_fill(col = "red",alpha = 0.3)
tm3<-tm_shape(data)+tm_borders(col = "blue")
tm4<-tm_shape(data)+tm_borders(lwd = 3)
tm5<-tm_shape(data)+tm_borders(lty = 2)
tm6<-tm_shape(data)+tm_fill(col = "red",alpha = 0.3)+tm_borders(col="blue",lwd = 3,lty = 2)
tmap_arrange(tm1,tm2,tm3,tm4,tm5,tm6)

图的颜色设置

  • breaks用于设置分档线
  • n表示分为几个区间
  • palette表示配色方案,例如BuGn。我们可以用tmaptools::palette_explorer()来发现更多的配色方案。可以在配色方案前加-反转配色顺序,-BuGn
tm1<-tm_shape(data)+tm_polygons(col = "Mdn_ncm")
breaks<-c(0,3,4,5)*10000
tm2<-tm_shape(data)+tm_polygons(col = "Mdn_ncm",breaks=breaks)
tm3<-tm_shape(data)+tm_polygons(col = "Mdn_ncm",n=10)
tm4<-tm_shape(data)+tm_polygons(col = "Mdn_ncm",palette="BuGn")


除了breaks可以手动设置区间,tmap包提供了style参数设置不同分区间方法

  • style="pretty",默认设置,整数,将区间均匀隔开
  • style="equal",均匀分布
  • style="quantile"
  • style="jenks",最大化区间间的差异
  • style="cont",适用于栅格数据,连续的颜色渐变
  • style="cat",用于分类,类别数据

图的布局

map_nz<-tm_shape(data)+tm_polygons()
#tm_compass()函数用于设置指北针,tm_scale_bar()用于设置比例尺
tm1<-map_nz+
  tm_compass(type = "8star",position = c("left","top"))+
  tm_scale_bar(breaks = c(0,100,200),text.size = 1)


函数tm_layout()用于设置各种布局参数,如下:
下面参数分别设置图的标题,背景颜色和有无框线

tm1<-map_nz+tm_layout(title = "新西兰",title.position=c("left","top"),title.size=2)
tm2<-map_nz+tm_layout(scale = 5)
tm3<-map_nz+tm_layout(bg.color = "lightblue")
tm4<-map_nz+tm_layout(frame = FALSE)

tm1<-map_nz+tm_layout(title = "frame.lwd=5",inner.margins = 0.1,title.position = c("centre","top"),title.size = 2,
                      legend.position = c("right","bottom"))
#out.margins表示与窗口边框之间的空白区域
#inner.margins表示图像和边框的距离

分面图

tm_facets()函数用于画分面图

urb_1970_2030 = urban_agglomerations %>% 
  filter(year %in% c(1970, 1990, 2010, 2030))

tm1<-tm_shape(world) +
  tm_polygons() +
  tm_shape(urb_1970_2030) +
  tm_symbols(col = "black", border.col = "white", size = "population_millions") +
  tm_facets(by = "year", nrow = 2, free.coords = FALSE)

动态地图网址

posted @ 2021-08-05 21:33  陈其永  阅读(1847)  评论(0编辑  收藏  举报