2015-01-12 59 views
2

我知道有幾個有關時間序列和多個數據框的回答問題,但我似乎無法弄清楚這一點。ggplot不等時間的多個時間序列

我想繪製4個不同壓力傳感器的時間標記數據(列pa)。我有來自同一個實驗的時間標記壓力讀數的4個dfs。然而,傳感器在不同的時間收集數據,並且由於傳感器故障和數據中的其他閃爍,列的長度不相等。

這兩個方面阻止我成功創建包含所有4個傳感器數據的圖。所有的df觀測數量都不相同,但在相同的範圍內,但它們在秒級上有所不同。例如,時間分辨率是否需要更改爲幾小時?

這是DF的樣子:PA_1 N = 1097361

 time    pa  wifi 
1 2014-09-01 16:21:00 100.620 1 
2 2014-09-01 17:20:33 100.572 1 
3 2014-09-01 18:20:05 100.561 0 
4 2014-09-01 19:19:38 100.523 0 
5 2014-09-01 20:19:11 100.511 1  
6 2014-09-01 21:18:43 100.534 1 

PA_2: n=914364 
     time    pa  wifi 
1 2014-09-01 15:25:05 NA   1 
2 2014-09-01 15:25:09 100.798 1 
3 2014-09-01 15:25:11 100.792 0    
4 2014-09-01 15:25:15 100.791 0    
5 2014-09-01 15:25:18 100.790 1    
6 2014-09-01 15:25:20 100.791 1 

PA_3 n=963527 
     time    pa  wifi 
1 2014-09-01 15:25:02 100.832 1 
2 2014-09-01 15:25:05 100.832 1 
3 2014-09-01 15:25:08 100.825 0 
4 2014-09-01 15:25:11 100.831 0 
5 2014-09-01 15:25:14 100.830 1 
6 2014-09-01 15:25:17 100.836 1 

PA_4: n = 1061117 
     time    pa  wifi 
1 2014-09-01 15:25:00 100.690 1 
2 2014-09-01 15:25:04 100.683 1 
3 2014-09-01 15:25:07 100.685 0 
4 2014-09-01 15:25:11 100.687 0 
5 2014-09-01 15:25:14 100.682 1 
6 2014-09-01 15:25:18 100.684 1  

另外,一個二分變量「WiFi」的加入到DF表示當無線網絡是打開或關閉的過程中experiment.Two傳感器暴露於wifi,而兩個在WiFi信號之外。 我想在圖表中顯示。也許通過在實驗過程中打開無線網絡區域或增加線路的大小,但我不太確定如何做到這一點。爲了說明這一點,我在例子中編輯了中間的2個wifi條目,但是一次只能連接10天,而不是幾秒鐘。

感謝

編輯:每個DF的添加實例和添加了一些explinations

+0

要清楚,你正試圖把所有四個都作爲一個單一的線?然後也許由wifi變量分開? – JasonAizkalns

+0

其他3個傳感器的樣本也 – arvi1000

+1

另外,您是否試圖將4個傳感器繪製爲4個不同的系列,或者您是否將它們組合成1個系列? (我認爲@ jaysunice3401是在他/她的回答中推斷後者) – arvi1000

回答

2

對我而言,你並不完全清楚你在問什麼,但是(如果這是你正在嘗試做的),你可以合併數據框架,然後將它們全部繪製在一張圖表上,使用顏色區分傳感器和alpha /形狀設置來區分wifi狀態。然後,系列在不同時間開始和結束並且具有不同的測量分辨率是沒有問題的。

事情是這樣的:

library(ggplot2) 
ggplot(dat, 
     aes(x=time, y=pa, group=sensor, 
      color=factor(sensor), alpha=factor(wifi))) + 
    geom_point(aes(shape=factor(wifi)), size=3) + 
    geom_line() + 
    scale_alpha_manual(values=c(.3, 1)) 

這(使用完全隨機的數據)看起來是這樣的:

enter image description here

生成隨機數據,我這樣做:

庫( lubridate)

# fake data 
set.seed(123) 
n <- 40 

dat <- 
    data.frame(sensor=sample(1:4, n, replace=T), 
      hr=sample(1:24, n, replace=T), 
      min=sample(1:60, n, replace=T), 
      sec=sample(1:60, n, replace=T), 
      wifi=rbinom(n, 1, .5), 
      pa=100+rnorm(n)) 

dat$time <- with(dat, ymd_hms(paste('2014-09-01', 
            paste(hr, min, sec, sep=':')))) 
+1

好的!我明白。我將添加一個「傳感器ID」列和rbind()4個dfs到一個,並按照您的代碼。謝謝! – Evan

+0

將數據連接成1個df後,這裏是第一個輸出:http://imgur.com/PCeKTYb,並且我認爲顯示wifi是否開啓/關閉的當前方式並不明顯。也許在X軸上或改變線條的思路。 – Evan

+0

另外,如何讓傳感器1和4顯示爲相同的顏色,並將傳感器2和3顯示爲不同的顏色? – Evan

0

我猜你可能會得到掛斷了group=1 - 你必須使用aes(group=1)使ggplot()知道連接數據一起排成一行。

library(ggplot2) 

# Create some data 
set.seed(1) 
PA_1 <- data.frame(time = Sys.Date()+rnorm(20, 0, 1), 
        pa = 100 + rnorm(20, 0, 2), 
        wifi = sample(0:1, 20, 2), 
        dset = 1) 

PA_2 <- data.frame(time = Sys.Date()+rnorm(15, 0, 1), 
        pa = 100 + rnorm(15, 0, 2), 
        wifi = sample(0:1, 15, 2), 
        dset = 2) 

PA_3 <- data.frame(time = Sys.Date()+rnorm(25, 0, 1), 
        pa = 100 + rnorm(25, 0, 2), 
        wifi = sample(0:1, 25, 2), 
        dset = 3) 

PA_4 <- data.frame(time = Sys.Date()+rnorm(20, 0, 1), 
        pa = 100 + rnorm(20, 0, 2), 
        wifi = sample(0:1, 20, 2), 
        dset = 4) 

# Combine the dataframes 
df <- do.call(rbind, list(PA_1, PA_2, PA_3, PA_4)) 
head(df) 
#   time  pa wifi dset 
# 1 2015-01-11 101.83795 0 1 
# 2 2015-01-12 101.56427 1 1 
# 3 2015-01-11 100.14913 0 1 
# 4 2015-01-13 96.02130 0 1 
# 5 2015-01-12 101.23965 1 1 
# 6 2015-01-11 99.88774 0 1 


# Variation 1 
p1 <- ggplot(df, aes(x=time, y=pa, group=1)) + 
    geom_line() 

# Variation 2 
p2 <- ggplot(df, aes(x=time, y=pa, group=wifi, color=factor(wifi))) + 
    geom_line() 

# Variation 3 
p3 <- ggplot(df, aes(x=time, y=pa, group=1)) + 
    geom_line() + 
    facet_wrap(~wifi) 

library(gridExtra) 
grid.arrange(p1, p2, p3, ncol=1) 

Results

另外,如果您選擇保留數據集 「獨立的」,你可以做以下之一:

ggplot(df, aes(x=time, y=pa, group=dset, color=factor(dset))) + 
    geom_line() 

Separate01

ggplot(df, aes(x=time, y=pa, color=factor(dset))) + 
    geom_line() + 
    facet_grid(wifi~dset) 

Separate02