はじめに
plot関数を使って折れ線グラフで日ごとの平均気温の変化を表現しようとした時に、「X軸を"4/1"のような形式の日付、Y軸を平均気温」に指定すると以下のようなエラーが発生します。
plot.window(...) でエラー: 有限な 'xlim' の値が必要です
追加情報: 警告メッセージ:
1: xy.coords(x, y, xlabel, ylabel, log) で:
強制変換により NA が生成されました
2: min(x) で: min の引数に有限な値がありません: Inf を返します
3: max(x) で: max の引数に有限な値がありません: -Inf を返します
X軸に1,2,3,...という連番形式で日付を入れるとどうにかグラフが出来上がりますが、これだと何日の気温なのかが分かりづらいです。
そこでグラフの目盛りを任意の文字(※ここでは日付)に変える方法を記事としてまとめてみました。
解決方法
解決の糸口
- 上記のように、X軸として「4/1」などの日付を指定するとそもそもグラフを描画できないため、「まずX軸にダミーの値(※ここでは連番)を指定してグラフを描画して、後から目盛りを任意の文字に変える」という方法を探してみました。
実際のコード
- 実際のコードは以下のように、「最初にX軸の目盛りを消した散布図を作り、後からX軸の目盛りを付け足す」という方法になりました。
- 「最初にX軸の目盛りを消した散布図を作る」際には、X軸にダミーの値(※ここでは連番)となる
df$no
を指定して描画しています。 - X軸の目盛りを消す時は
xaxt="n"
、Y軸の目盛りを消す時はyaxt="n"
を指定します。
- 「最初にX軸の目盛りを消した散布図を作る」際には、X軸にダミーの値(※ここでは連番)となる
# 連番、日付、平均気温のデータフレーム
df <- data.frame(
no = c(1,2,3,4,5,6,7,8,9,10),
date = c("4/1","4/2","4/3","4/4","4/5","4/6","4/7","4/8","4/9","4/10"),
temp = c(14.6,14.2,13.9,15.4,11.4,12.7,17.0,18.8,15.6,11.7)
)
# X軸の目盛りを消した散布図を作る。
plot(df$temp~df$no,
xlab="", ylab="Mean Temperature",
cex=1,
cex.lab = 0.8,
cex.axis = 0.8,
xlim=c(0.5, 10.5), xaxp=c(0,10,10), # X軸の範囲を指定する
type="b", # 折れ線グラフ
xaxt="n") # X軸を消す
# 後からX軸の目盛りを付け足す。
axis(side = 1,
at = seq(1, 10, by=1), # X軸の目盛りの刻みを指定する
cex.lab = 0.8,
cex.axis = 0.8,
labels=df$date)
- 出来上がった折れ線グラフは以下の通りです。
- ちょっと味気ないグラフですが、記事の冒頭のグラフと比べて日付が明確になっています。