0

次のようなセンサーデータがあります。

tm <- seq(1,17)
chg <-    c(13.6,13.7,13.8,13.9,14.1,14.2,14.4,14.6,14.7,14.9,14.9,15.0,15.0,13.7,13.7,13.6,13.7)
batt_A <- c(   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   3,   3,   0,   0)
batt_B <- c(   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1)
bus    <- c(12.4,12.5,12.4,11.7,11.6,12.2,12.4,11.8,11.7,11.5,12.1,12.0,11.6,11.5,11.4,12.6,12.5)
pwr <- data.frame(tm,batt_A,batt_B,chg,bus)

別々のファセットパネルに2つの線グラフ(chgとbus対tm)を作成したいと思います。ひねりは、追跡しているバッテリーを表すために各線に色を付けたいということです。したがって、batt_A> 0の場合、充電中であり、充電ラインを緑色にします。batt_A == 0の場合、それはバス上にあり、バスラインを緑色にします。batt_Bについても同じですが、線が青(または任意の色)になる点が異なります。

メルトとファセットの組み合わせがありますが、カラーリングを追加するにはどうすればよいですか?

(ps:同じタイムスケールで変化するセンサーがさらに6つあり、それらすべてを監視したいので、ファセットを使用しています)

以下のAndrieの答えで、私はこの解決策にたどり着きましたが、再コード化はひどいものです。

mpwr <- melt(pwr, id.vars=1:3)

mpwr$batt <- ''
mpwr$batt <- ifelse(mpwr$batt_A>0 & mpwr$variable=="chg", "A", mpwr$batt)
mpwr$batt <- ifelse(mpwr$batt_B>0 & mpwr$variable=="chg", "B", mpwr$batt)
mpwr$batt <- ifelse(mpwr$batt_A==0 & mpwr$variable=="bus", "A", mpwr$batt)
mpwr$batt <- ifelse(mpwr$batt_B==0 & mpwr$variable=="bus", "B", mpwr$batt)
mpwr$batt <- as.factor(mpwr$batt)

ggplot(mpwr, aes(x=tm, group=1)) + 
   geom_line(aes(y=value, colour=batt)) +
   geom_line(aes(y=value, colour=batt)) +
   facet_grid(~variable) +
   scale_colour_discrete("Charging")

データ処理をクリーンアップすることもできますが、私はそこにいると思います。

4

1 に答える 1

4

次のようなもの:

library(reshape2)
library(ggplot2)

mpwr <- melt(pwr, id.vars=1:3)

ggplot(mpwr, aes(x=tm, group=1)) + 
  geom_line(aes(y=value, colour=factor(batt_A!=0))) +
  geom_line(aes(y=value, colour=factor(batt_B!=0))) +
  facet_grid(~variable) +
  scale_colour_discrete("Charging")

ここに画像の説明を入力

于 2012-08-14T20:53:35.363 に答える