-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathV21_Geospatial.Rmd
80 lines (57 loc) · 4.88 KB
/
V21_Geospatial.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
```{r include=FALSE}
knitr::opts_chunk$set(cache = T, warning = F, message = F,
class.output = "output", out.width='100%',
fig.asp = 0.5, fig.align = 'center')
library(tidyverse)
```
# GEOSPATIAL {#geospatial}
地圖是一種用來展示地理空間信息的視覺化工具,可以幫助我們更好地了解和分析地理現象。常見的地圖種類通常可以分為兩類:區域圖和點位圖。
1. 區域圖(Choropleth Map)是通過將地理區域劃分為幾個區域,然後用不同的顏色、陰影或圖案等方式來表示這些區域的某種屬性或數量。這種地圖通常用於展示國家、省份、城市等區域的人口、經濟、地形、氣候等相關數據。區域圖能夠直觀地展示地理現象在不同區域之間的差異和變化,並有助於我們進行比較和分析。
2. 點位圖(Dot Density Map)則是通過在地圖上用點或符號來表示某種地理空間現象的分布或密度。例如,可以用紅點表示城市、綠點表示森林、藍點表示湖泊等等。這種地圖通常用於展示地理現象在空間上的分布和密度,並能夠直觀地展示相對密度和稀疏程度。
**區域圖的數據形式:**有兩種基本數據模型:向量(Vector)和網格(Raster)。
- 向量數據模型使用點、線、多邊形等基本要素來描述地理空間現象。例如,可以用一個線段來表示一條河流,用一個多邊形來表示一個國家或城市的邊界等。向量數據模型具有比較強的邏輯性和表達能力,特別適合描述較簡單的地理現象。
- 網格數據模型則是將地理空間區域劃分為一個個大小相等的格子,每個格子都有一個固定的數值,用來表示這個區域的某種屬性,例如溫度、濕度、高程等等。網格數據模型適合描述分布比較連續和具有變化的地理現象。
通常繪製地理資訊地圖的時候,會需要因應你要繪製的地域去下載地圖空間數據檔案(例如.shape或geojson檔等)。如台灣的就可以去[社會經濟資料服務平台 (moi.gov.tw)](https://segis.moi.gov.tw/STAT/Web/Platform/QueryInterface/STAT_QueryInterface.aspx?Type=1)下載。但也有一些套件內部就包含這些地理空間數據,例如下一節的例子rworldmap套件本身就有世界地圖。或者可以嘗試ggmap或rgooglemap等第三方服務(參考簡介:[Map Visualization in R · Data Science and R](https://mpmendespt.github.io/Map-visualization.html))
## World Map
```{r}
library(readxl)
library(rworldmap) # for drawing rworldmap
```
```{r}
rawdata <- read_excel("data/WORLD-MACHE_Gender_6.8.15.xls", "Sheet1", col_names=T)
mapdata <- rawdata[,c(3, 6:24)]
```
### Bind data to map data
這段程式碼是在將自己的數據**`mapdata`**與**`rworldmap`**世界地圖數據進行結合。
首先,使用 **`joinCountryData2Map()`** 函數,將自己的數據和世界地圖數據按照國家的 ISO3 代碼進行連接,生成一張新的地圖。其中, **`mapdata`** 是指世界地圖數據, **`joinCode`** 參數指定連接時使用的 ISO3 代碼(亦即你預先知道你自己的資料中有ISO3國家代碼)。 **`nameJoinColumn`** 參數則用於指定自己數據中與國家對應的欄位名稱為**`iso3`**。
還有其他的**`joinCode`**如「"ISO2","ISO3","FIPS","NAME", "UN" = numeric codes」等可參見該套件的說明[rworldmap package - RDocumentation](https://www.rdocumentation.org/packages/rworldmap/versions/1.3-6)。
```{r}
# join your data with the world map data
myMap <- joinCountryData2Map(mapdata, joinCode = "ISO3", nameJoinColumn = "iso3")
myMap$matleave_13
```
### Drawing Map
**`mapCountryData()`** 函數用於將數據繪製在地圖上。其中, **`myMap`** 是已經連接過的世界地圖數據和自己的數據,包含了各國的地理空間信息和相關的數據資訊。 **`nameColumnToPlot`** 指定要顯示在地圖上的數據欄位為**`matleave_13`**,也就是 2013 年的產假長度。 **`catMethod`** 參數是決定視覺化時的數據分類是類別或連續,**`categorical`**表示將數據分成幾個等級來展示在地圖上。
```{r}
mapCountryData(myMap
, nameColumnToPlot="matleave_13"
, catMethod = "categorical"
)
```
### Drawing map by specific colors
```{r}
# self-defined colors
colors <- c("#FF8000", "#A9D0F5", "#58ACFA", "#0080FF", "#084B8A")
mapCountryData(myMap
, nameColumnToPlot="matleave_13"
, catMethod = "categorical"
, colourPalette = colors
, addLegend="FALSE"
)
```
::: practice
### Practice. Drawing map for every years
1. 繪製自1995至2013年每年的地圖並觀察其上的變化。
2. 繪製的時候請嘗試使用`par()`來把每年的地圖繪製在同一張圖上,怎麼做?
3. 你能觀察出變化來嗎?可否透過顏色的調整來凸顯變化?你的策略是什麼?
:::