目的
R を使って、複数の時系列データのプロットを重ね描きする。データ毎の色分けを、ランダムな配色にしたい。
PC の環境
Windows 10
前準備
今回使用する R のパッケージをインストールする。
1. tidyverse
データ解析に有用なパッケージコレクション。グラフを作るggplot2 や、データ加工ができる tidyr などのパッケージが含まれている。
2. rondomcoloR
ランダムな配色ができるパッケージ。
多データの円グラフを作成するときなど、特に有用だと思う。
install.packages("tidyverse")
install.packages("randomcoloR")
時系列データの作成
今回は、A,B,C,D,....,Z の26地点で、1日目から7日目までの7回温度を測定した結果の
時系列データのプロットを作成することを目的に、進めていく。
まずは、その時系列データを作成する。
# データの作成
# 今回は、AからZの26地点において、温度測定(7回測定) の結果を想定している。
m <- matrix(rnorm(n=7*26, mean = 25, sd= 5), nrow = 7)
m <- cbind(c(1:7),m)
data_m <- data.frame(m)
colnames(data_m) <- c("day", LETTERS)
上記のコマンドにより、1列目に日付、2列目から27列目に A,B,C,D,....,Z の温度が並んだデータフレーム"data_m" が作成された。
データの整列
次に、時系列プロットの重ね書きに適した形に、データフレームを整列させる。
今回Rでグラフを描く方法では、プロットするデータの xとy が1対1対応している形にデータを整形させないといけない。
したがって、26x7=182行の縦長のデータに、"data_m" を整列させる。
# データ整列に必要な "tidyr" パッケージを含む、"tidyverse" を呼び出す。
library(tidyverse)
# 各地点の温度変化を示す折れ線グラフを作成するために、データを整列。
# データを縦長に変更
data_long <- pivot_longer(data = data_m,
cols = -day,
names_to = "Place",
values_to = "Temperature")
これによって、1列目は日付、2列目は観測地点、3列目は温度を示す縦長のデータフレーム"data_long" ができた。
時系列データのプロットの重ね描き
データフレーム"data_long" からプロットを作成すると、時系列データを重ね描きしたプロットが作成される。
# 折れ線グラフを作成
graph <- ggplot(data_long, aes(x = day, y = Temperature, color = Place))
graph <- graph + geom_line()
graph
右に示される凡例をみると、AからZの26データの色分けが、グラデーションになっているのが分かる。R で一定数以上のデータをプロットする場合、自動的にグラデーションカラーが適用される。
R には、様々なカラーパレットが用意されているが、そのほとんどは1限られたデータ数(例えば、12色までなど)にしか適用できない。
折れ線グラフでは、あまり弊害がないかもしれないが、円グラフとなるとデータ凡例が分かりづらくなる。
ランダムな色で配色したグラフの作成
そこで、ランダムな色を生成できる "rondomcoloR" パッケージを利用する。
# ランダムな色を配色した、折れ線グラフを作成
graph2 <- ggplot(data_long, aes(x = day, y = Temperature, color = Place))
graph2 <- graph2 + geom_line()
plot_color <- randomColor(26,hue="random")
graph2 <- graph2 + scale_color_manual(values = plot_color)
graph2
データの並びに関係ない配色となった。
以上!