2017-04-18 112 views
0

我有不同組別組件的時間序列數據。帶有各種時間戳的每個組ID(作爲日期給出)具有低位和高位響應數據。我想通過facet(ggplot)爲(1)Group ID和響應(即(2)Hyper和Hypo響應)繪製每個組的時間序列,以便通過響應的圖像是另一個的頂部。任何幫助表示讚賞。通過ggplot在R中繪圖

下面給出了一個演示數據集和我迄今爲止所做的工作。

set.seed(1) 
tdat <- data.frame(Group = rep(paste0("GroupID-", c("A","B")), 
           each = 100), 
        Date = rep(seq(Sys.Date(), by = "1 day", length = 100), 2), 
        Fitted = c(cumsum(rnorm(100)), cumsum(rnorm(100))), 
        Signif = rep(NA, 200)) 
tdat <- transform(tdat, Hyper = Fitted + 1.5, Hypo = Fitted - 1.5) 
## select 1 region per Site as signif 
take <- sample(10:70, 2) 
take[2] <- take[2] + 100 
tdat$Signif[take[1]:(take[1]+25)] <- tdat$Fitted[take[1]:(take[1]+25)] 
tdat$Signif[take[2]:(take[2]+25)] <- tdat$Fitted[take[2]:(take[2]+25)] 

和數據幀是這樣的 -

> head(tdat) 
     Group  Date  Fitted Signif  Hyper  Hypo 
1 GroupID-A 2017-04-18 -0.6264538  NA 0.8735462 -2.1264538 
2 GroupID-A 2017-04-19 -0.4428105  NA 1.0571895 -1.9428105 
3 GroupID-A 2017-04-20 -1.2784391  NA 0.2215609 -2.7784391 
4 GroupID-A 2017-04-21 0.3168417  NA 1.8168417 -1.1831583 
5 GroupID-A 2017-04-22 0.6463495  NA 2.1463495 -0.8536505 
6 GroupID-A 2017-04-23 -0.1741189  NA 1.3258811 -1.6741189 

時間序列被日期給出。

我繪製的數據如下。然而,我的真實數據有更多的組ID,我真的很想爲每個組ID分配一張圖片,將圖片分解爲Hyper和Hypo響應。

library(ggplot2) 
ggplot(tdat, aes(x = Date, y = Fitted, group = Group)) + 
    geom_line() + 
    geom_line(mapping = aes(y = Hyper), lty = "dashed") + 
    geom_line(mapping = aes(y = Hypo), lty = "dashed") + 
    geom_line(mapping = aes(y = Signif), lwd = 1.3, colour = "red") + 
    facet_wrap(~ Group) 

再次,任何幫助表示讚賞。

感謝

+0

所以在你的榜樣的情節是不是你預期的輸出?您是否嘗試過'facet_grid()'而不是? – Jimbou

回答

3

如何這樣的事情,用geom_ribbon展現超和低價值:

tdat %>% 
ggplot(aes(Date, Fitted)) + 
    geom_line(lty = "dashed") + 
    geom_line(aes(y = Signif), lwd = 1.3, color = "red") + 
    geom_ribbon(aes(ymin = Hypo, ymax = Hyper, group = Group), alpha = 0.2) + 
    facet_grid(Group ~ .) + 
    theme_light() 

結果: enter image description here

+0

對不起,下面給出的圖片有效。 – user44552

+0

是的,它更好地回答你寫的問題。至於哪個更好的可視化,那麼你是法官:) – neilfws

5

如果將reshapereshape2tidyr數據或data.table並將寬轉換爲長:

library(reshape2) 
tdat2<-melt(tdat,id.vars = c("Group","Date","Signif","Fitted")) 

ggplot(tdat2, aes(x = Date, y = value, group = Group)) + 
geom_line() + 
geom_line(mapping = aes(y = Signif), lwd = 1.3, colour = "red") + 
facet_wrap(variable~ Group) 

enter image description here

+0

而不是使用'facet_wrap'我會使用'facet_grid(變量〜組)'。海事組織是更優雅和日曆。 – Jimbou

+0

我不想改變任何事情,只是給OP想要的東西。 OP使用'facet_wrap(〜Group)'。同意'facet_grid'可能更乾淨,'theme'可以改進。 –

+0

這不是批評。只是一個額外的評論。 – Jimbou