以下のグラフの上は,時系列データの2変数を表示したものである。縦軸は両者同じにしている。ずいぶん見にくいし,2変数の関係はよく分からないだろう。
真ん中のグラフは,2番目のデータを調整して表示したものである。実は,上の図と2番目の図の2番目のデータ「何々」は実際のデータを0.8倍したものである。両者がよく一致している(同じ動きをしている)ことが分かるだろう。
実は,2つのデータは2014/08/15~2014/07/18の日経平均株価の始値と終値で,「何々」というのは0.8×終値である。終値が0.8掛けされているのだから,素直に描くと上のような図になる。実体は1/0.8倍して描いた真ん中の図になるのだから,どちらが実体を表しているか分かるだろう。
なお,散布図は通常は原点を描かずに描かれる。ただし,単なる散布図だと,時間の順序が不明になるので,線で結んだり,データ識別子を付けたりして下の図のように描けば,時間変動と二変数の関係を同時に表示することもできる。
結論としては,「折れ線グラフに原点は不要」とか「二軸グラフは不適切」ということではなく,「図表示の目的に合わせて,適切な図を描く」と言うことに尽きるのではないか??
目的によっては(場合によっては)「折れ線グラフにも原点は必要」だし「2軸の目盛りを適切に設定して図を描くことも必要」なのではないか??
上のグラフを描いたプログラム
d = structure(list(始値 = c(15317.15, 15284.38, 15111.76, 15164.73,
15022.64, 15063.73, 15138.72, 15260, 15506.87, 15474.65, 15511.54,
15732.78, 15616.89, 15564.79, 15426.98, 15342.46, 15350.28, 15367.16,
15296.42, 15174.08), 終値 = c(15318.34, 15314.57, 15213.63,
15161.31, 15130.52, 14778.37, 15232.37, 15159.79, 15320.31, 15474.5,
15523.11, 15620.77, 15646.23, 15618.07, 15529.4, 15457.87, 15284.42,
15328.56, 15343.28, 15215.71)), .Names = c("終値", "何々"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5",
"6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "20"))
d$何々 = 0.8*d$終値
layout(matrix(1:3, 3))
old = par(mgp=c(1.8, 0.8, 0), mar=c(3, 3, 1, 4))
plot(d$始値, ylim=c(11000, 15700), type="o", ylab="円")
points(d$何々, pch=19, type="o")
legend("right", legend=c("始値", "何々"), pch=c(1, 19))
plot(d$始値, ylim=c(14500, 15700), type="o", ylab="円")
par(new=TRUE)
plot(d$何々, pch=19, type="o", ylab="", yaxt="n")
axis(4)
legend("bottomright", legend=c("始値", "何々"), pch=c(1, 19))
plot(何々~始値, d, xlab="円1", ylab="円2")
lines(何々~始値, d)
text(d$始値, d$何々, 1:20, pos=4, xpd=TRUE)
par(old)
layout(1)