Rのグラフ描画常套手段 (?)

Rのグラフ描画常套手段 (?)


「Factorデータを色に変換して描画する」
というのは、常套手段のようなので、以下に自分でデータを作ってメモしてみました。


例)
各行に、各Sampleの各時刻でのデータが入っているデータを想定する。(dfとする。)
データの1列目には、car_id 列がある。


ある列に測定時の(速度情報の)数値が入っていて (列名:speed )
ある列に測定時の(ギア情報の)文字列が入っている (列名:gear )
データであるとする。
※ 簡単のため、データは時系列に並んでいるものとする。


このデータを、ある1台に関して、わかりやすくグラフ化したい。


もちろん、ギア毎にboxplotなどで、speedをプロットしてもよいが、
今回は、各要素に入っている情報が、時系列データであるので、その情報を尊重したい。


そこで、横軸はVectorのIndex(≒時系列)、縦軸にSpeed、そして、Gearの違いは色で分ける ことにする。


※ 偽データを準備。

speed1 <- c(5,10, 15,20,22,30,38,45,55,60,65,70,80,85)
gear1    <- c("LOW","LOW","2","2","2", "3","3","3","4","4","4","4","TOP","TOP")
df1 <- data.frame(car_no = 1 , speed=speed1 , gear=gear1 )
speed2 <- c(5,8, 9,16,18,24,30,40,50,55,60,65,75,80)
gear2    <- c("LOW","LOW","2","2","2", "2","3","3","3","3","4","4","4","TOP")
df2 <- data.frame(car_no = 2 , speed=speed2 , gear=gear2 )
df <- rbind(df1 ,df2)


前提として、car_no が1番の車(行データ) のデータ抽出方法は以下。

df[df$car_no==1,]


car_no が1番の、速度とギアの情報を、時系列情報を尊重したままプロットしてみる。

numericGear <- as.numeric(as.factor( df[ df$car_no==1, ]$gear ))
plot( df[df$car_no==1,]$speed , pch=19, col=numericGear, ylab="speed" )


見た目をよくするために少し改良する。
as.factorでは何故か水準を指定できないので、factor()をつかってlevelsオプションを渡す。
legendを入れる。場所はtop,bottom, right,leftの組み合わせで指定可。

gear_levels = c("LOW","2","3","4","TOP")
gear_levels_color <- as.numeric(factor( gear_levels, levels=gear_levels )) # For legend color

gear_vec_color <- as.numeric(factor( df[ df$car_no==1, ]$gear, levels=gear_levels )) # For plot color

plot( df[df$car_no==1,]$speed , pch=19, col=gear_vec_color, ylab="speed" )
legend("topleft",legend=gear_levels ,col=gear_levels_color , pch=19 )