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

餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

Rでグラフの軸ラベルを回転させる

計量分析やシミュレーションに関係の無いデータで、Rでグラフを描いている人は少数派だと思います。
データ入力を表計算ソフトなどで行い、そこからテキスト・ファイルで保存するのに手間がかかる*1と言うのもあると思いますが、慣れていないと上手くレイアウトするのが大変だと言うのもあると思います。
例えば、X軸ラベルを縦書きにすると、以下のような操作が必要で大変です*2

1. 元のグラフ

まずは、ありがちな折れ線グラフを描いてみます。軸のラベルの数が少ないので見栄えが良くありません。

2. 90度回転させる

ラベルを90度回転させると、軸ラベルの数が増えますが、出所と軸ラベルが重なります。

変更前コード

# 表示位置を12ごとにする。df$DATEは文字列型
at <- c(1, seq(1, length(df$DATE), by=12), length(df$DATE))
# 表示位置の部分だけ、df$DATEから抽出
labels <- df$DATE[at]
# ラベルの最後は空欄にする
labels[length(labels)] = ""
# X軸を表示する
axis(1, labels=labels, at=at, pos=1)

変更後コード

at <- c(1, seq(1, length(df$DATE), by=12), length(df$DATE))
labels <- df$DATE[at]
labels[length(labels)] = ""
# ラベルなしで軸だけ表示
axis(1, labels=FALSE, at=at, pos=0)
# par("usr")はグラフの表示位置を示すベクターで、3番目は下側の軸の位置になります。
# srt=-90がマイナス90度回転で、pos=4が左よりを示します。
text(x=at, par("usr")[3], labels=labels, srt=-90, pos=4, xpd=TRUE)

軸表示関数だけではラベルの回転をさせる事ができません。

3. 下側の余白を空け、出所の位置を移動させる

出所と軸ラベルが重なりを解消しましょう。

変更前コード

# marオプションは底辺,左側,上側,右側の順に余白の大きさを行の高さ(mex)で指定
par(mar=c(5, 4, 4, 2))

mtext("出所) 日本銀行時系列統計データ検索サイトのデータより編集", side=1, line=2.5, adj=0)

変更後コード

par(mar=c(8, 4, 2, 1))

mtext("出所) 日本銀行時系列統計データ検索サイトのデータより編集", side=1, line=5.5, adj=0)

4. まとめ

データセットと全体のコードが無いと分かりづらい面もあるため、最終形のファイルを公開しておきます。
将来的には改良されるかも知れませんが、現状ではRでグラフを描くのは、それなり手間隙がかかる事が分かると思います。プログラマー的には、文字列の縦横サイズを取得するメソッドが無いので、きっちり描画位置を決めづらい所も不満に残ります(strwidthとstrheightがあると言うツッコミがあったので取り消し)。

*1:Excelファイルのまま読み込ませるにはパッケージが必要だし、CSVファイルなどでも数値データにカンマが混じっていたりするとas.numeric(gsub(",", "", 列名))とするはめになります。

*2:90度回転でよければ、axis(1, las=2)とすれば楽です。