library(readr)
trade <- read_csv("trade.csv")
head(trade)
## # A tibble: 5 × 7
## origins destinations import longitude.x latitude.x longitude.y latitude.y
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 USA Japan 17.9 -113. 45.7 138. 37.5
## 2 Australia Japan 9.32 134. -25.7 138. 37.5
## 3 China Japan 5.54 104. 36.6 138. 37.5
## 4 New Zealand Japan 2.51 171. -41.8 138. 37.5
## 5 Germany Japan 1.91 10.4 51.1 138. 37.5
オンラインでデータ読み込む場合は、以下のコード。
trade <- read_csv("https://ayumu-tanaka.github.io/teaching/trade.csv")
geosphere
パッケージtrade.csvのデータから複数の国の間をつなぐ航路を一括作成する。
gcIntermediate()
という関数は、2地点の航路を求める。addStartEnd = TRUE
は出発点と到着点を結果の中に含めることを指定。breakAtDateLine=TRUE
と設定。trade[,4:5]
とtrade[,6:7]
は輸出国と輸入国の緯度経度。library(readr)
trade <- read_csv("trade.csv")
library(geosphere)
flows <- gcIntermediate(trade[,4:5], trade[,6:7], sp = TRUE, addStartEnd = TRUE, breakAtDateLine=TRUE)
#輸入データ
flows$import <- trade$import
#輸出国
flows$origins <- trade$origins
#輸入国
flows$destinations <- trade$destinations
> head(flows)
class : SpatialLinesDataFrame
features : 5
#地図描画に必要なパッケージの読み込み
library(leaflet)
#グラフを描く際に色を指定するためのパッケージの読み込み
library(RColorBrewer)
#貿易フローの矢印をクリックした時にラベル(輸出国、輸入国、貿易額)が出てくるように設定。
#paste0()は複数の文字列を結合する関数。
countrylabel <- paste0(flows$origins, " to ",
flows$destinations, ': ',
as.character(flows$import))
#輸出国別に貿易フローの矢印の色分け指定(4色、Set2は色調の種類)
pal <- colorFactor(brewer.pal(4, 'Set2'), flows$origins)
#参考:https://stats.biopapyrus.jp/r/graph/rcolorbrewer.html
#貿易フロー地図の描画
#データはflows、ウェイトは輸入額。輸出国別に色分け。
#(1) 基礎編 「~」はベクトルであることを示す
leaflet() %>%
addTiles() %>% #規定の地図背景を使う
addPolylines(data = flows, weight = ~import, label = countrylabel,
group = ~origins, color = ~pal(origins)) #貿易フローのライン
leaflet() %>%
addProviderTiles('CartoDB.Positron') %>% #サードパーティーの地図背景を使う
addPolylines(data = flows, weight = ~import, label = countrylabel,
group = ~origins, color = ~pal(origins)) %>% #貿易フローのライン
addLayersControl(overlayGroups = unique(flows$origins),
options = layersControlOptions(collapsed = FALSE)) #貿易フローのラインを操作するボタン