Rでお遊び:「globe」パッケージの出力をインタラクティブに拡大縮小する方法


「globe」パッケージの出力を「svgPanZoom」と「SVGAnnotation」パッケージで拡大・縮小が可能なプロットにする方法を紹介します。

なお、台風経路はJAXAの台風データベースで紹介されているユニシス社のデータを「XML」と「RCurl」パッケージを利用して取得しています。

・JAXAの台風データベース
 http://sharaku.eorc.jaxa.jp/TYP_DB/database_j.html

・ユニシス社のデータ
 http://weather.unisys.com/hurricane/

・「svgPanZoom」と「SVGAnnotation」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-154/

・「globe」パッケージ
 https://www.karada-good.net/analyticsr/r-383/

実行コマンドはR version 3.2.2で確認しています。


実行コマンド

詳細はコメント、各パッケージのヘルプを確認してください。

#パッケージの読み込み
#パッケージの読み込み
library("globe")
library("svgPanZoom")
library("SVGAnnotation")
library("XML")
library("RCurl")

#JAXAの台風データベースを参考:http://sharaku.eorc.jaxa.jp/TYP_DB/database_j.html
#ユニシス社:http://weather.unisys.com/hurricane/からデータを取得
#2015年のデータURLを設定
SelectURL <- "http://weather.unisys.com/hurricane/w_pacific/2015/index.php"
#ページ内容を取得
doc <- getURL(SelectURL)
#内容をparse
doc <- htmlParse(doc)
#ページ内のリンクを取得
Listhref <- xpathSApply(doc, "//li/a", xmlGetAttr, 'href')
Dthref <- xpathSApply(doc, "//td/a", xmlGetAttr, 'href')
#データリンクを抽出
Allhref <- c(Listhref[grep("\\.dat$", Listhref)], Dthref[grep("\\.dat$", Dthref)])
#データの取得
MasterData <- NULL
for(i in seq(Allhref)){
#データリンクを設定
GetData <- paste0("http://weather.unisys.com/hurricane/w_pacific/2015/", Allhref[i])
#台風名を取得
Name <- unlist(strsplit(Allhref[i], "/"))[1]
#データを読み込み
Data <- readLines(GetData)
#必要のないデータを削除
Data <- Data[4:length(Data)]
#データ格納用の変数を準備
SubMasterData <- NULL
#連続処理
for(m in seq(length(Data))){
#読み込んだデータを空白ごとに文字を分割
GetStrings <- unlist(strsplit(Data[m], " "))
#文字が存在しないデータを削除
GetStrings <- GetStrings[grep(".", GetStrings)]
#台風名と結合
GetStrings <- c(Name, GetStrings)
#分割されるSTATデータを結合処理
if(length(GetStrings) > 8){
  #分割された場合
  GetStrings <- c(GetStrings[1:7], paste0(GetStrings[8:length(GetStrings)], collapse = "-"))
  SubMasterData <-  rbind(SubMasterData, matrix(GetStrings, ncol = 8))
  
} else {
  #分割されない場合
  SubMasterData <-  rbind(SubMasterData, matrix(GetStrings, ncol = 8))

}}

#データを結合
MasterData <-  rbind(MasterData, SubMasterData)

}

#取得データをdata.frame化
MasterData <- as.data.frame(MasterData)
#データ名を付与
names(MasterData) <- c("NAME", "ADV", "LAT", "LON", "TIME", "WIND", "PR", "STAT")

###取得したデータから拡大が可能な地球儀プロットを作成#####
#台風経路をプロット用に変形
TyphoonPoint <- t(apply(MasterData[ , 4:3], 1, function(x) as.numeric(as.character(x))))

#インタラクティブにプロット
svgPanZoom(svgPlot(
{
#札幌を中心
LonLatData <- ensurelonlat(c(141.21, 43.3))
#空の地球儀をプロット
globeearth(eye = LonLatData, top = place("northpole"))
#台風経路をプロット
globepoints(loc = TyphoonPoint, eye = LonLatData, top = place("northpole"),
            col = rgb(0.4, 0.3, 0.5, alpha = 0.5), pch = 17, cex = .5)
}
))

出力例

拡大・縮小・移動が可能です。


少しでも、あなたのウェブや実験の解析が楽になりますように

スポンサードリンク

おすすめコンテンツ


スポンサードリンク