2012-10-28 95 views
4

我曾希望繪製兩個時間序列,並根據當時的系列較大來遮蔽系列之間的空間。geom_ribbon中可能存在的錯誤

這裏是兩個系列 - 首先在一個數據幀有指示器無論哪個系列是當時

d1 <- read.csv("https://dl.dropbox.com/s/0txm3f70msd3nm6/ribbon%20data.csv?dl=1") 

更大,這是熔融的系列。

d2 <- read.csv("https://dl.dropbox.com/s/6ohwmtkhpsutpig/melted%20ribbon%20data.csv?dl=1") 

我的情節......

ggplot() + geom_line(data = d2, 
       aes(x = time, y = value, group = variable, color = variable)) + 
     geom_hline(yintercept = 0, linetype = 2) + 
     geom_ribbon(data = d1[d1$big == "B",], 
        aes(x = time, ymin = csa, 
         ymax = csb), 
         alpha = .25, 
         fill = "#9999CC") + 
     geom_ribbon(data = d1[d1$big == "A",], 
        aes(x = time, ymin = csb, 
         ymax = csa), 
        alpha = .25, 
        fill = "#CC6666") + 
     scale_color_manual(values = c("#CC6666" , "#9999CC")) 

導致...

the resulting plot

爲什麼會出現在小區的中間多餘的藍色波段?

+1

這是因爲你在數據中的間隙。要告訴'ggplot'這個間隙,並且什麼都不繪製,你必須在每個「部分」的末尾添加一行NA數據來終止功能區。 – Andrie

+0

我實際上並不確定就是這樣,因爲這只是兩個模擬隨機遊走系列。爲什麼他們的絲帶之間沒有紅絲帶? – tomw

+1

我第二次評論@Andrie。情節是正確的。功能區連接數據點。如果你想消除差距,你必須創建單獨的色帶。 –

回答

8

這是一個解決方案。我在第一geom_ribbon函數代替data = d1[d1$big == "B",]用:

data = rbind(d1[d1$big == "B",], 
      d1[c((which(diff(as.numeric(d1$big)) == -1) + 1), 
        (which(diff(as.numeric(d1$big)) == 1))), ]) 

這是必要的,因爲d1$big == "B"序列的第一行和最後一行通常包含不同csacsb值。因此,有一個可見的功能區連接數據。上述命令使用之前的最後一行以及這些序列之後的第一行以及第一個功能區的數據。 d1$big == "A"(第二個功能區的底部)不存在此問題。

的完整代碼:

ggplot() + 
geom_line(data = d2, 
      aes(x = time, y = value, group = variable, color = variable)) + 
geom_hline(yintercept = 0, linetype = 2) + 
geom_ribbon(data = rbind(d1[d1$big == "B",], 
          d1[c((which(diff(as.numeric(d1$big)) == -1) + 1), 
           (which(diff(as.numeric(d1$big)) == 1))), ]), 
      aes(x = time, ymin = csa, ymax = csb), 
      alpha = .25, fill = "#9999CC") + 
geom_ribbon(data = d1[d1$big == "A",], 
      aes(x = time, ymin = csb, ymax = csa), 
      alpha = .25, fill = "#CC6666") + 
scale_color_manual(values = c("#CC6666" , "#9999CC")) 

enter image description here

+0

輝煌,謝謝Sven。這是一個非常簡潔的使用比較 – tomw

+0

我不知道如何包括這個爲我自己的情節,我最終制作了兩個新的列,1上方和1下方的線,填補了NA的空間。這工作完美無瑕 – Mathias711

相關問題