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)

動態地圖網址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM