折れ線グラフ -R言語 plot- 覚え書き

 グラフの描画はExcelで挿入 - グラフが一番簡単。

 だけど使ってみたくなるR言語。

 R言語の導入については、以前簡潔にまとめた。

描画

  まず用意したデータファイル .csvをread.csv()で読み込む。

  ここではcovid19.csv。現在進行形の新型コロナウイルス感染者数の推移。

  値はU.S.A. ジョンズ・ホプキンス大学  Mapping 2019-nCoVのページ(systems.jhu.edu/research/public-health/ncov/)から。閲覧時(毎日決まった時刻ではない)の値とこちらのページ(github.com/CSSEGISandDATA/COVID-19)から取得した値。
   ※ 一応covid19.csvファイルは、こちらに保存。詳細データは大元へ。
  Excel等に入力後、カンマ区切りファイル .csvへ変換。
  読み込んだ後、文字化けを起こす場合、文字コードをチェック。

  R起動後、ファイル - 作業ディレクトリの変更で、作業ディレクトリ(covid19.csvファイルがあるディレクトリ)を選択。

 data <- read.csv("covid19.csv",header=T)

  1行目が列名の場合、header=Tをつける。つけないと1行目もデータ扱いとなって不具合が生じる。

  なお1列目(DAY)の日付(2020/3/1など)は、Date型に変換しておかないと順序がおかしくなる。

 data[,1] <- as.Date(data[,1],"%Y/%m/%d")

  plot()で描画。

 plot(data[,1],data[,2],type="l")

  1列目(DAY)が横軸、2列目(JAPAN)が縦軸。
  type="l"をつけないと点プロット。線で結ばれない。
  なおR言語では2は2列目。他の言語だと0から始まるので3列目。

 plot(data$DAY,data$JAPAN,type="l")

でも同じ。

 横軸(X軸)の日付表示がいまいちなので手直し。
 グラフは、メインの点や線の描画より軸・ラベル、凡例の描画のほうが面倒。

 いったんxaxt="n"で描かないようにする。

plot(data[,1],data[,2],type="l",xaxt="n")

 次に

par(xaxt="s")

でX軸を描くようにする。
 par()はパラメーターを変更する関数。

 axis()で座標軸を新たに描く。xaxt="n"でいったん消したのは上書きされてしまうため。

axis.Date(1,at=seq(min(data$DAY),max(data$DAY),"days"),format="%m/%d")

 といった具合。
 最初の引数1はグラフの下(X軸)。2が左(Y軸),3が上,4が右。
 at=…は、軸の目盛。seq()は数列を生成する関数。ここでは左から最小値、最大値、目盛間隔(日ごと)。
 formatは、実際に表示する形式。

 X軸、Y軸のラベルも気になるので、もう一度やり直し。
 xlabylabでX軸、Y軸のラベルを付け替え。

plot(data[,1],data[,2],type="l",xaxt="n",xlab="日付",ylab="感染者数(日本)[人]")
par(xaxt="s")

の後、axis.Date(…

 このグラフだけだと急増しているようにみえる。

多重描画

 データのうちY軸最大のITALYについて同じ要領で描画。

plot(data[,1],data[,5],type="l",xaxt="n",xlab="日付",ylab="感染者数[人]")
par(xaxt="s")
axis.Date(1,at=seq(min(data[,1]),max(data[,1]),"days"),format="%m/%d")

 points()で、IRAN、JAPANのデータを重ね合わせ。

points(data[,1],data[,4],type="l",lwd=3)
points(data[,1],data[,2],type="l",lwd=5)

 lwdは線の太さ。
 colで色を指定。SOUTH KOREAとSPAIN。

points(data$DAY,data[,3],type="l",lwd=2,col="brown")
points(data$DAY,data[,6],type="l",lwd=2,col="blue")

 ltyで線の形式を指定。FRANCEとGERMANYとU.S.A.。

points(data$DAY,data[,7],type="l",lwd=2,col="green",lty="dashed")
points(data$DAY,data[,8],type="l",lwd=2,col="orange",lty="dotted")
points(data$DAY,data[,9],type="l",lwd=2,col="pink",lty="dotdash")

 あとは凡例 legend

legend("topleft",c("日本","SOUTH KOREA","IRAN","ITALY","SPAIN","FRANCE","GERMANY","U.S.A."),
lwd=c(5,2,3,1,2,2,2,2),
col=c("black","brown","black","black","blue","green","orange","pink"),
lty=c("solid","solid","solid","solid","solid","dashed","dotted","dotdash"))
上のグラフにはないが、CHINAは80000人超。

 手書きの線みたい。

 このグラフだと日本平穏にみえる。
 見せ方次第で印象が変わる。

 ggplot2パッケージもある。

R
スポンサーリンク
ふシゼン
タイトルとURLをコピーしました