見出し画像

[ R ] ふたつの折れ線グラフを重ねて描く

概要 この記事は,R を使ってふたつの折れ線グラフを重ねて描く手順を説明したものです。初心者を対象にわかりやすく,説明することを心がけています。

折れ線グラフとは

折れ線グラフにはx 軸とy 軸があります。

x 軸の数値が変化することによって,y 軸のデータ量がどのように変わるのかを確認するときに効果的なグラフです。

具体例

純アルコール量と死亡リスクの関係を調査した,Holman たち (1996) の調査結果を折れ線グラフで描いてみました。

Holman CD, English DR, Milne E, Winter MG. Meta-analysis of alcohol and all-cause mortality: a validation of NHMRC recommendations. Med J Aust. 1996;164:141–5.

1日あたりの純アルコール量が増えるほど,死亡リスクが上昇するというグラフです。純アルコール量の摂取と死亡リスクとの間の関係がよくわかりますね。折れ線グラフはこのようにふたつの変数間の関係を見たい場合によく使われます。

折れ線グラフを描く

図1 を作図するには次のようにタイプすればできます。

# データを準備
g <- c(0, 5, 15, 25, 35, 45, 55, 60)

male <- c(1.00 0.88 0.84 0.93 1.01 1.06 1.20 1.37)
female <- c(1.00, 0.88, 0.94, 1.13, 1.33, 1.47, 1.47, 1.58)
 #折れ線グラフを描く 
par(yaxt = "n")
plot(g, male,xlab="摂取量(g)", ylab="死亡リスク", type="o", col=1)
par(yaxt = "n")
par(new=TRUE)
plot(g, female,xlab="摂取量(g)", ylab="死亡リスク", type="o", lty=2)
legend("topleft", legend=c("男性", "女性"), lty=c(1,2),pch=c(1,1))

下から1行目と5行目に plot() があります。plot() で折れ線グラフを描いています。それ以外にも,par() が複数使われています。par() を使って,何をしているのでしょうか。

説明していきましょう。

データを準備する

g <- c(0, 5, 15, 25, 35, 45, 55, 60)

まずはデータの準備です。これは純アルコール量です。x 軸の連続量です。

male <- c(1.00 0.88 0.84 0.93 1.01 1.06 1.20 1.37)
female <- c(1.00, 0.88, 0.94, 1.13, 1.33, 1.47, 1.47, 1.58)

上は男性,女性の死亡率です。y 軸の連続量です。

純アルコール量 0g のときの死亡率を 1 としたとき,5g 摂取すると,男性の死亡率が .80 となり,女性が .88 となることを示しています。1より小さいと死亡の
リスクが小さくなっていること,1より大きいとリスクが大きくなっていることを示しています。

ふたつのグラフを重ねるときの一工夫

ふたつのグラフを重ねるときは次のようにします。

plot(g, male,xlab="摂取量(g)", ylab="死亡リスク", type="o", col=1)
par(new=TRUE)
plot(g, female,xlab="摂取量(g)", ylab="死亡リスク", type="o", lty=2)

2行目に,par(new=TRUE) とあります。これによって,すでにあるグラフに次書くグラフを重ね合わすことができます。

しかし,これだけでは,望むようなグラフを得ることはできません。何も考えずに,ふたつのデータを描いたらどうなるか,まずはみてみましょう。

ここで,plot() の引数,type, col, lty が何か気になりますが,それは別の記事で説明しましょう。

 図2. ふたつのグラフを何も考えずに重ねて描いた場合

y 座標の目盛に注目してください。一つ目のグラフの目盛と二つ目のグラフの目盛が重なってしまっています。これでは困りますね。

重ならないようにするには,一つ目のグラフを描くとき,y 座標の目盛を描かないようにすればいいでしょう。それを実現するには,一つ目のグラフを描く前に次の設定をしておけばよいです。

par(yaxt = "n")
plot(g, male,xlab="摂取量(g)", ylab="死亡リスク", type="o", col=1)

par(yaxt = "n")と書くことによって,一つ目のグラフの出力は次のようになります。

図3. par(yaxt="n") によってy座標の目盛の出力が抑制させる

女性のグラフを描く際には,y 座標の目盛を描く必要があります。par(yaxt = "t")と書けば,y座標の目盛を出力できます。

par(yaxt = "n")
plot(g, male,xlab="摂取量(g)", ylab="死亡リスク", type="o", col=1)
par(yaxt = "n")
par(new=TRUE)
plot(g, female,xlab="摂取量(g)", ylab="死亡リスク", type="o", lty=2)
legend("topleft", legend=c("男性", "女性"), lty=c(1,2),pch=c(1,1))
図4. 再掲

このようにふたつの図を重ねて描くことができまいsた。

おすすめの書籍

R のグラフィックスに関する書籍

R 言語に関する書籍

  • Garrett Grolemund (著)「RStudioではじめるRプログラミング入門」(オライリージャパン)

  • Hadley Wickham ・ Garrett Grolemund (著)「Rではじめるデータサイエンス」(オライリージャパン)

ネットにある情報を頼りに言語を学ぶには限界があります。それぞれ人の好みにもよりますが,数冊,体系的に詳しく書かれた教科書を手元に置いておくのが良いと思います。

ひとそれぞれの効率のよい勉強の仕方がありますから,自分にあった本を探すのがいいと思います。ただ,いい本は高い・・・

この記事が気に入ったらサポートをしてみませんか?