R语言地理空间分析(二)制图
sf
对象和sp
对象都有自己的绘图函数plot()
,但此函数只能实现一些简单的功能,达不到制图的要求,为了地图的美观可以运用tmap
包
基础知识
tmap的说明文档,tmap
可以识别sp
,sf
,raster
对象。
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)
图的美化函数
以下函数都有col
,alpha
,lwd
,lty
参数用来调节颜色,透明度,线条宽度和线条类型
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)