2012-08-14 29 views
0

我有看起來像這樣的傳感器數據的顏色:ggplot,面,並改變了一系列

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) 

我想創建單獨的小板兩個線形圖(CHG和總線對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

類似以下內容:

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") 

enter image description here

+0

非常接近,Andrie!不過,這些線條應該有相反的顏色。所以如果chg是正確的,那麼公共汽車的顏色應該翻轉,這表明在藍色電池正在充電時紅色電池在公共汽車上。我會玩它,非常感謝。 – wylbur 2012-08-14 21:37:51