tmaps手工調整採樣點地圖的圖例

2021-03-02 ecoinformatics

tmap是用來繪製地圖的R程序包,作者是荷蘭統計學家Martijn Tennekes (https://github.com/mtennekes/tmap)。tmap結合sf、sp等程序包,繪製設色地圖、點分布圖、柵格圖等十分方便,本公眾號以前也有介紹。

不過,tmap在繪製複雜的採樣點分布圖時,默認的圖例往往不太理想。tmap用點的形狀、顏色分別表示採樣點的類型(如森林、溼地、草原),用大小表示數量(物種豐富度等),此時,形狀、顏色和大小三個維度是分開的,圖例也默認相應分開,而這並不是用戶想要的,因此需要對代碼進行修改。

本文給出一些示例代碼,主要參考Xu S. et al. (2020)論文和附件。相應數據和代碼可在 https://github.com/helixcn/ecoinformatics 下載。

讀取數據

圖中需要有指北針和比例尺,要求用藍色實心三角,表示森林(forest);綠色實心圓點,表示草地(grassland);藕荷色實心菱形,表示溼地(wetland)。

setwd("/Users/admin/Documents/")
library(tmap)
library(tmaptools)
library(sf)

## Linking to GEOS 3.8.1, GDAL 3.1.1, PROJ 6.3.1

library(sp)
library(openxlsx)

rm(list = ls()) # 刪除工作空間中原來的對象

sites <- read.xlsx("rspb20202063_si_002.xlsx")
head(sites)

## Variable References Country Latitude Longitude
## 1 Aboveground biomass Liu et al. 2017b Germany 51.33857 12.378462000000001
## 2 Aboveground biomass Liu et al. 2017b Germany 51.33857 12.378462000000001
## 3 Belowground biomass Brassard et al. 2011 Canada 49.50000 -89.6
## 4 Belowground biomass Brassard et al. 2011 Canada 49.17000 -89.83
## 5 Belowground biomass Finér et al. 2017 Spain 40.70000 −1.9
## 6 Belowground biomass Finér et al. 2017 Spain 40.70000 −1.9
## MAT.(℃) MAP.(mm) Ecosystem Duration Plant.diversity.level Plot.area.(m2)
## 1 9.545 544 forest 0.29 2 0.0881
## 2 9.545 544 forest 0.29 4 0.0881
## 3 2.500 712 forest 1.00 NA 400.0000
## 4 0.600 823 forest 1.00 NA 400.0000
## 5 10.200 499 forest NA 2 900.0000
## 6 10.200 499 forest NA 3 900.0000
## LnRR
## 1 0.06509796
## 2 0.31643103
## 3 0.53959844
## 4 0.32157929
## 5 -0.36161104
## 6 -0.62003058

sites$Longitude <- as.numeric(sites$Longitude) # 某些Longitude或者Latitude記錄可能為空,不能識別為numeric類型,因此先要用as.numeric轉換。

## Warning: NAs introduced by coercion

sites$Latitude <- as.numeric(sites$Latitude)

sites <- sites[!(is.na(sites$Longitude)|is.na(sites$Latitude)),] # 去掉Longitude和latitude為NA的記錄

# 建立spatial data.frame
coordinates(sites) <- ~Longitude+Latitude
proj4string(sites) <- CRS("+proj=longlat +datum=WGS84") # 設定WGS84投影

head(sites)

## class : SpatialPointsDataFrame
## features : 6
## extent : -89.83, 26, 47.3, 51.33857 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs
## variables : 10
## names : Variable, References, Country, MAT.(℃), MAP.(mm), Ecosystem, Duration, Plant.diversity.level, Plot.area.(m2), LnRR
## min values : Aboveground biomass, Brassard et al. 2011, Canada, 0.6, 544, forest, 0.29, 2, 0.0881, -0.217864917184295
## max values : Belowground biomass, Liu et al. 2017b, Romania, 9.54499998254081, 823, forest, 1, 4, 900, 0.539598438991999

world <- read_sf("world20200121_polygon.shp") #讀取shape文件(注意:本圖為多邊形,沒有九段線)
st_crs(world) <- 4326 # 確定WGS84投影

繪製採樣點分布圖

默認情況下,地圖的圖例有三種,分別按照顏色、形狀和大小給出。

## 01
map01 <- tm_shape(world) +
tm_borders("grey60", lwd = 1) + # 國界線為灰色
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
alpha = 1,
col = "Ecosystem", # 點的顏色按照Ecosystem顯示
border.lwd = 2,
palette = c("blue", "seagreen4", "magenta2"), # 指定三種顏色
shapes = c(17, 19, 18), # 點的形狀按照Ecosystem顯示,分別為17、19、18
size = 0.3,
labels = c("forest", "grassland", "wetland"), # 點的名稱設定為forest、grassland、wetland
title.col = "Ecosystem", # 圖例名稱為Ecosystem
legend.col.show = TRUE, # 在圖例中顯示顏色
legend.shape.show = TRUE) + # 在圖例中顯示形狀
tm_scale_bar(breaks = c(0, 2500, 5000, 10000), # 比例尺
position=c(0.60, 0.0), # 比例尺在地圖中的位置
text.size = 1) +
tm_compass(type = "4star", # 指北針類型
position=c("right", "top"), # 指北針位置
size = 2.5) + # 指北針大小
tm_layout(inner.margins=c(0.12,0.03,0.08,0.03), # 地圖邊緣的大小
legend.stack = "horizontal", # 圖例排列
fontfamily = "FreeSerif") + # Times New Roman (MacOS)
tm_legend(position=c(0.05, 0.20), # 圖例放在圖左下角
legend.text.size = 0.8,
legend.title.size = 1.2) +
tm_add_legend(
type = "symbol",
title = "Ecosystem" # 圖例標題
)

map01

## Scale bar set for latitude km and will be different at the top and bottom of the map.

## 8inches by 5 inches, 600dpi
# jpeg("map01.jpeg", width = 8*600, height = 5*600, res = 600)
# map01
# dev.off()

更改圖例後的地圖

用tm_add_legend手工調整:

tm_add_legend(
type = "symbol",
labels = c("grassland", "forest", "wetland"),
col = c("seagreen4", "blue", "magenta2"),
shape = c(19, 17, 18),
title = "Ecosystem"
)

更改後的代碼:

# 02
map02 <- tm_shape(world) +
tm_borders("grey60", lwd = 1) +
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
alpha = 1,
col = "Ecosystem",
border.lwd = 2,
palette = c("blue", "seagreen4", "magenta2"),
shapes = c(17, 19, 18),
size = 0.3,
labels = c("forest", "grassland", "wetland"),
title.col = "Ecosystem",
legend.col.show = FALSE,
legend.shape.show = FALSE) +
tm_scale_bar(breaks = c(0, 2500, 5000, 10000),
position=c(0.60, 0.0),
text.size = 1) +
tm_compass(type = "4star",
position=c("right", "top"),
size = 2.5) +
tm_layout(inner.margins=c(0.12,0.03,0.08,0.03),
legend.stack = "horizontal",
fontfamily = "serif") +
tm_legend(position=c(0.05, 0.20),
legend.text.size = 0.8,
legend.title.size = 1.2) +
tm_add_legend(
type = "symbol",
labels = c("grassland", "forest", "wetland"), # 圖例的標籤
col = c("seagreen4", "blue", "magenta2"), # 圖例顏色
shape = c(19, 17, 18), # 圖例
title = "Ecosystem"
)


map02

## Scale bar set for latitude km and will be different at the top and bottom of the map.

## 8inches by 5 inches, 600dpi
# jpeg("map02.jpeg", width = 8*600, height = 5*600, res = 600)
# map02
# dev.off()

附:繪製歐洲部分的地圖

# 03
map03 <- tm_shape(world,
xlim = c(-15, 40), # 經度範圍
ylim = c(35, 70)) + # 緯度範圍
tm_borders("grey60", lwd = 1) +
tm_shape(sites) +
tm_symbols(shape= "Ecosystem",
col = "Ecosystem",
palette = c("blue", "seagreen4", "magenta2"),
size = 0.2,
shapes = c(17, 19, 18),
border.lwd = 1.8) +
tm_scale_bar(position = c("left", "top")) +
tm_layout(legend.show = FALSE, fontfamily = "serif")

map03

## Scale bar set for latitude km and will be different at the top and bottom of the map.

## 4 inches by 5 inches, 600dpi
# jpeg("map03.jpeg", width = 4*400, height = 5*400, res = 600)
# map03
# dev.off()

參考:

Xu, S., Eisenhauer, N., Ferlian, O., Zhang, J., Zhou, G., Lu, X., Liu, C., & Zhang, D. (2020). Species richness promotes ecosystem carbon storage: Evidence from biodiversity-ecosystem functioning experiments. Proceedings of the Royal Society B, 287(1939), 20202063. (https://doi.org/10.1098/rspb.2020.2063)

Tennekes M (2018). 「tmap: Thematic Maps in R.」 Journal of Statistical Software, 84(6), 1-39. doi: 10.18637/jss.v084.i06 (https://doi.org/10.18637/jss.v084.i06).

相關焦點

  • 地圖圖例設計的新模式:圖例可視化
    為了使圖例表達更多有用的信息,同時顯示表達圖例要素間的空間關係,本文在對地圖圖例要素分析的基礎上,提出了圖例可視化及動態交互的地圖圖例設計模式。利用可視化的方法對地圖圖例進行表達,圖例不僅僅作為「圖邊的說明」幫助完成地圖信息的傳輸,同時也作為地圖的重要組成部分顯式表達、傳遞地圖所不能表達的相關信息,如要素統計信息和結構信息。
  • 英文繪本 | ​​​​The Key to Maps(地圖圖例)
    點擊上方藍字關注我們每日共讀免費英文繪本第412期key 圖例map 地圖zoo 動物園symbols 標誌(複數)museum看看地圖圖例。The map key tells you stands for dinosaurs. 這個地圖的圖例告訴你這代表恐龍所在的位置。
  • 初中地理知識點歸納:根據圖例提取地圖信息
    根據圖例提取地圖信息     圖例是集中於地圖一角或一側的地圖上各種符號和顏色所代表內容與指標的說明,有助於更好的認識地圖。它具有雙重任務,在編圖時作為圖解表示地圖內容的準繩,用圖時作為必不可少的閱讀指南。圖例應符合完備性和一致性的原則。 圖例是地圖上表示地理事物的符號。
  • 2021年中考地理知識點:根據圖例提取地圖信息
    中考網整理了關於2021年中考地理知識點:根據圖例提取地圖信息,希望對同學們有所幫助,僅供參考。   根據圖例提取地圖信息   圖例是集中於地圖一角或一側的地圖上各種符號和顏色所代表內容與指標的說明,有助於更好的認識地圖。它具有雙重任務,在編圖時作為圖解表示地圖內容的準繩,用圖時作為必不可少的閱讀指南。
  • 初中地理知識點歸納:圖例
    圖例是集中於地圖一角或一側的地圖上各種符號和顏色所代表內容與指標的說明,有助於更好的認識地圖。   就是指地圖符號和註記的簡要說明。它通常配置在地圖的邊緣或拐角處。   例如1∶4000000《中國地形圖》(地圖出版社,1982),它的圖例是這樣的:首都用紅色五角星表示,省、市、自治區政府駐地用紅色圓形表示,其他城鎮分別用大小不等的藍色圓圈表示;國界、省界、地區界分別用粗細不一、間隔不等的虛點線表示;鐵路用黑白相間的線段表示;公路用紅色單線表示;河流用由細到粗的藍色單線表示;山峰用黑色三角形表示,等等。
  • 2021年中考地理知識點:圖例
    中考網整理了關於2021年中考地理知識點:圖例,希望對同學們有所幫助,僅供參考。   圖例是集中於地圖一角或一側的地圖上各種符號和顏色所代表內容與指標的說明,有助於更好的認識地圖。   就是指地圖符號和註記的簡要說明。它通常配置在地圖的邊緣或拐角處。
  • 腦洞大開,外網上的不織布手工DIY,附圖例教程哦
    腦洞大開,外網上的不織布手工DIY,附圖例教程哦。原來不織布不僅能做漂亮的裝飾品,還能做N多實用的東東呢。不織布,也叫無紡布,無紡布沒有常見布料的經線和緯線,即使不鎖邊,也不會出現脫絲現象。由於不織布的裁剪和縫紉都非常方便,而且具有布料挺括、容易定型的特性,因此深受手工愛好者的喜愛。色彩鮮豔粉嫩的不織布,做成裝飾性字母擺件,是不是很漂亮啊。做小一點,可以掛在家裡植物上或者窗戶下,做大一點,塞上鼓鼓的PP棉,還可以當做一個漂亮的靠枕使用。
  • 七年級上冊微課 | 地圖:方向、比例尺、圖例和註記
    A.a地在d地的東北方向    B.c地在a地的西南方向C.b地在a地的東南方向    D.d地在b地的西北方向3.讀下圖,①點位於③點的(    6.街景圖(   )A.是平面圖   B.可計算道路寬度  C.應補充圖例註記    D.能表現方位關係7.
  • 小小手繪地圖 卻有大大的作用
    手繪地圖即手工繪製的地圖
  • python繪圖 | 空間地圖上散點氣泡繪製
    geojson 文件數據,此類文件可在DAtAV 地圖選擇器進行下載。添加氣泡散點數據這裡的數據來源為我的朋友J哥的公號:菜J學Python,感謝提供數據支持。由於數據的經緯度是直接基於高德地圖進行解析的,導致存在部分數據經緯度信息出錯,我們使用pandas進行簡單的數據篩選,具體就不再展示,後面會推出系列教程推文,數據預覽如下:
  • 簡單幾步自制地圖,媽媽再也不會擔心我迷路了——arcgis製作專題地圖
    小夥伴們,我們之前已經學習過了基本的製圖技術和理論,今天我們將運用之前我們所學的知識製作自己需要的各類地圖。首先,我們來看看製作專題地圖的基本步驟:1.數據加載:主要是相關的專題要素,底圖要素等,查看屬性,添加修改需要的屬性。2.屬性表達:將專題要素圖形表達出來。如:地名,自己需要的備忘等。
  • 地圖的閱讀——學會閱讀地圖 教案
    一、教學目標【知識與技能】初步掌握地圖上的比例尺、方向、圖例等基礎知識,能夠運用地理語言閱讀地圖,掌握閱讀和使用地圖和地理圖表的基本技能。【過程與方法】通過閱讀各類地圖、計算、比較等方式培養讀圖能力,建立地圖的空間概念。
  • 地圖:地理科技寫作的「痛點」 知多少?
    針對地理科技寫作中經常遇到的地圖插圖問題,特邀請西北師範大學地理信息科學系潘竟虎教授簡要總結整理了其中容易出現的問題,提出了製作地圖插圖需要注意的有關事項,並對地理科技寫作中地圖的合理使用和地圖類插圖的「正確打開方式」給出了建議。地圖無小事,使用須規範。快來圍觀吧,看看究竟地理科技寫作中的地圖「痛點」 究竟有多少。
  • 三河市核酸檢測機構、採樣點名單(新增社區採樣點)
    三河市核酸檢測機構、採樣點名單(新增社區採樣點) 2021-01-11 10:30 來源:澎湃新聞·澎湃號·政務
  • 超級地理丨我們該如何看地圖?學習地圖需要注意什麼?
    學習地圖需要注意什麼呢?下面就一起來學習一下吧!我們先從地圖的基本三大要素說起,不管是什麼地圖,基本的三要素是需要具備的。地圖第一要素:比例尺比例尺是地圖能夠放大和縮小的關鍵,讓我們能夠把任何面積的範圍繪製到紙上的方法。
  • 【ggplot2】- 設置圖例
    中aes中的參數(x, y 除外)基本都會生成圖例來解釋圖形, 比如 fill, colour, linetype, shape.基本箱線圖(帶有圖例)library(ggplot2)bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot()bp移除圖例Use guides(fill=FALSE),
  • 全部是電腦地圖繪製技術!
    工具,將地圖縮放到適當大小,也可用滑鼠滾輪轉動來調整地圖縮放大小。然後單擊「文件」選擇「打開數據文件」,或直接在菜單欄上點擊圖 51.2風格樣式調整1.2.1設置地圖背景顏色點擊菜單「視圖」,選擇「背景顏色」(如圖6所示),在彈出的對話框中選擇藍色方塊後「確定」。
  • 《學會閱讀地圖》教案
    《學會閱讀地圖》教案一、教學目標【知識與技能】初步掌握地圖上的比例尺、方向、圖例等基礎知識,能夠運用地理語言閱讀地圖,掌握閱讀和使用地圖和地理圖表的基本技能。【過程與方法】通過閱讀各類地圖、計算、比較等方式初步形成讀圖能力,建立地圖的空間概念。
  • 絕地求生 地圖 調整毒圈平衡性 調整沙漠地圖
    《絕地求生》官方在今天發布了新一輪的更新公告,主要亮點則是調整毒圈平衡性,調整沙漠地圖,以及遊戲內不再刷似乎沒什麼用的服裝了。調整藍圈(毒圈)的平衡性今年1月, 我們結合各位玩家給予的反饋,在內部進行了多次藍圈的平衡性測試以及調整。我們期待本次更新能改善遊戲流程的不規律、不均勻問題。希望大家多多給予反饋。沙漠地圖(Miramar)調整我們將對Miramar進行第二次調整。由於地圖北部周邊區域的風險性以及較低的物資刷新率,玩家們很難在此運用各種遊戲戰略。
  • 環保部:《環境空氣臭氧前體有機物手工監測技術要求(試行)》
    監測的具體目標化合物應根據所監測地區的臭氧前體有機物排放水平及特徵動態調整確定,臭氧前體有機物監測清單見附錄A。5樣品採集5.1點位布設開展臭氧前體有機物手工監測的點位,一般選擇在HJ664規定的空氣自動監測站點位上布設,監測點位基於近年臭氧監測濃度水平數據,應包含城市主城區內臭氧高濃度點,點位保持相對固定;當臭氧高濃度點發生變化的時候,應考慮增加監測點位。