【locator,Nippon,TeachingDemo】世界を二つに分けたがる
ヘロヘロプーな感じで生きていると、世の中を
「●●な人」
「●●でない人」
の二つに分けたがるマンに、見事に仕分けられてしまうことがよくある。(ない)
複雑な世の中を二つに分けて論じようなんて傲慢である。
ずるい。私も世界を二つに分けたい。
テーマ
◎日本を二つに分ける。
◎...のは傲慢なので、小さい日本を二つに分ける。
◎分けただけだとつまらないので、その技を何かに応用してみる
とりあえず分けてみる
使ったのは以下のパッケージ。
Nipponパッケージのフォルダ内に含まれているシェープファイルをお借りする。
library(maptools) library(TeachingDemos) library(Nippon)
シェープファイルの準備
#Nipponパッケージに使用されているシェープファイルのフルパスを取得 #readShapePolyで読み込み m <- system.file("shapes/jpn.shp", package = "Nippon")[1] %>% maptools::readShapePoly(., proj4string = CRS("+proj=longlat +datum=WGS84"))
ちなみにJapanPrefecturesMap()で描いてみるとこんな感じの日本である。
Nippon::JapanPrefecturesMap()
取得したシェープファイルを描画する。
JapanPrefectureMapでの描画に比べて、沖縄が定位置にある。
plot(m,col=gray(0.8))
これをこんな感じで二つに分けたい。
(こんな感じ)
そのままぱっかーんてすると罰当たりな感じがするので
もうちょっとささやかな感じで分けたい。
ということで、
ぱっかーんと分けた日本を、サブプロットとして埋め込むことを検討する。
分けたいところの座標を取得
「この辺!!特に何もないけどこの辺で分けたいんだよ!!」
という時は、locator()が便利。
#元のplotをまず描画 plot(m,col=gray(0.8)) #locatorを実行 > locator(2) #2点クリックして座標ゲット $x [1] 127.6297 139.5370 $y [1] 46.78319 29.40000 #plot内のお好きなところの左上、右下をそれぞれクリック。 #座標の取得が出来る。
同様に、埋め込みたいところの座標も取得しておく。
準備が整ったので、
TeachingDemo::subplotで元plotの上に重ねていく。
#元plot plot(m,col=gray(0.8)) #西日本 subplot({ plot(m,xlim=c(127,138),ylim=c(30,45),col=gray(0.8)) box() },x=c(141.5,145),y=c(30,36.5)) #東日本 subplot({ plot(m,xlim=c(138,146),ylim=c(30,45),col=gray(0.8)) box() },x=c(145.5,149),y=c(30,36.5))
subplotの中はboxで囲んでね!としている。
これで描画するとこんな感じ。
ぱっかーん
できた。
いい。いいよ、ささやかだよ。
でもなんかすごい悪いことをした気持ちになる。
やはり世の中の事象を単純にTRUE、FALSEで分けてしまうのはだいそれたことだな、といった感じ。
お茶を濁す
さて、
これをやって終わるわけにはいかないので
これが何に使えるのかについて考える。
分かりやすいのが沖縄なので、沖縄をお好きなところに移動させる。
> plot(m,col=gray(0.8)) > subplot({ + plot(m,xlim=c(127,130),ylim=c(25,30),col=gray(0.8)) + box() + },x=c(131,133),y=c(39,42))
さっきと同じやり方をすると、沖縄が二つに分身してしまう。
これは元plotで沖縄も描画に含んでしまっているからなので、
元plotの方のxlim,ylimで描画範囲を限定してうまいことやる。
plot(m,xlim=c(128,146),ylim=c(30,46),col=gray(0.8)) #沖縄を除く subplot({ plot(m,xlim=c(127,130),ylim=c(25,30),col=gray(0.8)) box() },x=c(131,133),y=c(39,42))
できた。
他のplotでもこんな感じでlocatorで座標取得してよきに指定すれば
便利なことが多々あるかもしれない。
という話。(だったことにする)