2020年8月18日火曜日

積み上げ折れ線グラフ

午前
・修論手伝い(データ解析検討)
・個人ゼミ

午後
・文献経理
・授業準備

学生に、「そのうち教えるからデータ入力だけしておいて」と言って、ほったらかしにしていたRによるグラフ作成。

積み上げ折れ線グラフと、地図作成方法について、教え方を検討した。実際に教えるのは後日。

データは、いわゆるスタック形式(縦長データ)

本研究室では日付を8桁の数値(本日は20200818となる)で記録しているので、このままグラフにすると、20200831〜20200901までの70がデータがない余白になる。

ハマり①:8桁の数値を日付データに変換する。as.Data()を使うことが判明するまで、結構な時間を要した。

#データをdata_popuとして読み込んだ
#数字ではas.Dateできないため文字に変換
data_popu$date_sum <- as.character(data_popu$date_sum)
#日付に変換
data_popu$date_sum <- as.Date(data_popu$date_sum, "%Y%m%d")

スタック形式は1行1個体を意味しているので、採集日ごとの個体数を数える。採集日(date_sum)ごとの行の数を数えれば良い。行の数はlength()で数えることができる。

ハマり②:以前は、こんな時はtapply()を使っていたが、ネットを参考にaggregate()を使ったら少しハマった。

data_day <- aggregate(data_popu, by=list(data_popu$date_sum), length)
plot(data_day$date~data_day$Group.1, type="b")

8桁の数値が日付として認識されたので(2020-08-18となっている)、無駄な余白がなくなった。

続いて、種ごとの積み上げ折れ線を作りたい。そのためには、採集日ごとの種ごとの個体数データが必要。

ハマり③:reshape2が良く分かっていない。ネットで調べたママ使った。

採集日ごとの種ごとの個体数(行数)を整理する。ただし、アスンタック形式(横広データ)。

library(dplyr) #group_by()、summarize()、select()に必要
library(reshape2) #dcast()、melt()に必要
library(ggplot2)
#採集日(date_sum)ごとの種(spe)ごとに行数(個体数)をまとめる。
frog <- dcast(data_popu, date_sum~spe, fun.aggregate=length)
frog

下記で使えるように縦長にする。

frog_tsumi <- melt(frog, id.vars = "date_sum")
frog_tsumi

ggplot2で作図する。

ハマり④:そもそもggplot2に慣れていないのだが、日付のxlimは「as.Date(""),as.Date("")」で指定することに悩んだ。

tsumiage <- ggplot(data = frog_tsumi)
	+ geom_area(
    	mapping= aes( x = date_sum , y = value , fill = variable))
        + xlim(as.Date("2017-01-01"), as.Date("2017-12-31"))
plot(tsumiage)

参考したサイト

【R】8桁の数字を日付に変換

積み上げ折れ線グラフをggplot2で描く