読者です 読者をやめる 読者になる 読者になる

Rでラベル付き散布図を作成して保存するまで

この程度のことだけれど意外に少し情報探すのにも苦労したのでメモ。散布図を書く場合、どの点がどの数値なのかのラベルが欲しい時がある。Rの場合、maptoolsパッケージを用いるとうまく出力できるのでその方法を紹介する。

データの準備

maptools関数*1を読み込んで、データを準備。*2

#今回使うライブラリ
library(maptools)

#データの準備
CC <- c("CAN","DNK","FIN","FRA","DEU","ITA","JPN","KOR","NLD","POL","SWE","GBR","USA")
PAR <- c(13.7,15.7,16.6,16.6,20.2,20.1,22.1,10.3,14.9,13.5,17.6,15.6,12.8)
SE <- c(3.8,7.4,8.6,11.5,8.5,12.2,9.3,1.9,5.4,8.9,9.4,6.2,5.5)

sample <- data.frame(PAR, SE)
rownames(sample) <- CC

散布図作成

次の手順で散布図の作成を作成してラベルをつける。

plot(sample$PAR, sample$SE, xlab="65歳以上人口比率(%)", ylab="対GDP比高齢者向け社会支出(%)")
pointLabel(x=sample$PAR, y=sample$SE, labels=rownames(sample))

1行目は普通の散布図を作成するコマンドの例。
2行目が、今作った散布図の上にラベルをかぶせるコマンドの例。このpointLabel関数がmaptoolsパッケージに入っている。

実行して出力した結果が下の図。
f:id:hnsn1202:20130210022103p:plain

パッケージを使わない場合は以下のようにしてもできるが、点と完全にかぶるので一緒に表示すると文字が見にくい。

text(sample$PAR,sample$SE,labels=rownames(sample))

図の保存(EPS)

eps画像で保存する時は次のようにする。epsはベクタ画像なので貼り付け先で利用さえ出来ればこちらを使いたいところ。

dev.copy2eps(file="sanpuzu.eps", width=9, height=9, family="Japan1")

文字の大きさは、プロットエリアのサイズとの相対比なので、図のサイズを大きくしたら文字は小さくなる。EPSであれば画像が荒くなる心配もないことだし、文字の大きさはとりあえずこれで調整している。

もし日本語が豆腐文字になったりすれば、フォントの指定を試行錯誤すれば解決するはず。利用できるフォント例は以下。

"Japan1", "Japan1HeiMin", "Japan1HeiMin", "Japan1GothicBBB", "Japan1Ryumin"

Macの場合の例は以下。

"Osaka", "HiraMinProN-W3", "HiraMinProN-W6", "HiraKakuProN-W3", "HiraKakuProN-W6", "HiraMaruProN-W4"

図の保存(png)

png形式での保存方法などはわざわざ私が紹介する必要もないかもしれないけれど、自分用のメモと思って最後に書いておく。

png("out.png", width=500, height=500)
plot(sample$PAR, sample$SE, xlab="65歳以上人口比率(%)", ylab="対GDP比高齢者向け社会支出(%)")
pointLabel(x=sample$PAR, y=sample$SE, labels=rownames(sample))
dev.off()

*1:標準ではインストールされていないので最初はCRANからインストールする。

*2:例で使っている数値はOECDのもの。2008年の各国の65歳以上人口比率(Population Aging Rate)と高齢者向け社会保障支出の対GDP比(Social Expenditure)を利用した。国名は国別コード(Country Code)で示す。