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 )