2015年1月10日土曜日

R:画面四分割して右下にlegendつける

超ニッチ。
こんな感じのグラフ(jpgじゃないと読み込めない?まさかそんな!)
が欲しい時のTips。

まず画面を四分割して、
par(mfrow=c(2,2))

一つ一つグラフを描画。screenで指定しなくてもいいんだろうけど、
スクリプト描くときはこれあると出来上がりをイメージできて好き。
screen(1); plot(1:7)
screen(2); barplot(1:7)
上のように違うプロット方法もできるし、下のようにsourceなどをつかってながなが書きがちな部分を省略もできる。
screen(3); source("graph.r")

んで、肝心の文字だけの部分だけど、普通にtextとかで描こうとすると
「グラフ書いてないよ!」とか怒られる。
そこで、
screen(4); plot.new()
とかやって騙す。あとは
           legend("topleft",legend=c("hogera",box.lty=0)
とかなんとか書いてやればok。textでもできるんだろうけど、
今回は座標を指定しなくても勝手に考えてくれるlegendを採用。
box.ltyはlegendの枠線指定なので、今回は書かんでええでの0(ゼロ)。
legendの前に
           par(font = 3)
を書いておけば判例でも斜体が使えるゾ!

あとは前に紹介したような方法で保存してやればバッチリ。
これであなたの修論もバッチリ!(白目)

R:グラフの保存

Rで作成したグラフをキャプキャーで保存しているトーシローは、
今回紹介するスクリプトを活用してほしい。

makeGraph <- function(names){
 nm <- paste(names,".eps",sep="")
 dev.copy2eps(file=nm)
dev.off()

}

なんのひねりもないが、作成したグラフを表示した状態で
makeGraph(*******)
で指定するとアラ不思議、ディレクトリの中に
********.eps
というファイルができているでは、あーりませんか。

epsはjpgなんかと情報の保存方法が異なるため引き延ばしたり形を変えても文字まで引き延ばされたりすることはない。思う存分楽しんでほしい。さらに、パワポで使用するときには線のみを表示し、背景が見えるというオマケつき。色付きの四角で囲むことが大好きなお兄さんもこれならグラフの部分だけ白抜けして恥を描くこともないはずだ。

勝手なアドバイスとしては、グラフを保存する際にはデフォルトの大きさ、つまりウィンドウを動かすことなく出たままの比率で保存すると、大量に保存したりいくつかのグラフを並列に乗せるとき綺麗に見える。

R:地図の描画

Rで地図を描くテクニック。
パワポなんかで発表するとき地図の下に転載元を描くなんてナンセンス。

まずRのなかでライブラリを呼び出して準備。
library(ggplot2)
library(maptools)
無いよ、なーんて言われてしまった準備不足のアナタは
install.packages("********")
のおまじない。******はパッケージ名。

んで、おもむろにshpファイルを開くんだが、
まてまてそんなんもってないぞ、というアナタは
japan_ver72
なんかでググって見つけるといい。見つからない時は他の人のブログをみて探すのだ。

同じディレクトリに入っていれば解凍してすぐ
dtl <- readShapePoly("japan_ver72/japan_ver72.shp")     #市町村レベル
ken <- readShapePoly("japan_ver72/japan_ver72.shp")     #県レベaル
plot(*******)  #*******は上の変数どっちでも。
綺麗な日本地図が手に入っただろうか。これで日本はアナタのものだ。
あとは緯度経度を指定してそのすばらしさをほしいままにしたらいい。
色なんか変えるのはスライド用ならいらない。太さは
lwdで変えられる。

例として任意の太さで地図が書ける超簡単なスクリプトを上げておくので、参考にしたらいいかしらん。これで石垣島の地図が手の中に。
使い方は、テキストに保存してsource("***")で指定するかRに直接ぶちこんだあと、
makeIshigaki(3)  #( )内の数字で線の太さを指定する
すればいい。時間がかかるかもしれないが気にせずコーヒーでも入れて待っていればいいだろう。

makeIshigaki <- function(max){
for (i in 1:max){
 plot(dtl,xlim=c(124,124.5),ylim=c(24.4,24.5),lwd=i)
 names <- paste("ishigaki",i,".eps", sep = "")
 makeGraph(names)
}
}