2016-05-27 97 views
1

我想繪製一個時間序列,排除繪圖中間的一段時間。如果我單獨繪製這個系列,只在X軸上有一個索引,那就是我所得到的。沒有出現排除點的內部集合。在R中有不連續軸的繪圖時間序列

x <- rnorm(50) 
Dates <- seq(as.Date("2008-1-1"), by = "day", length.out = length(x)) 
dummy <- c(rep(1, 25), rep(0, 10), rep(1, length(x) - 35)) 
plot(x[dummy == 1]) 

然而,一旦日期在X軸上,R忠實地呈現準確的真實時間刻度,包括排除日期。這會在圖上產生一個空白區域。

plot(Dates[dummy == 1], x[dummy == 1]) 

如何在x軸上獲取日期,但不顯示排除日期的空白區域?

+0

這樣做會打破你的x軸,這是不是一個好主意。也許你可以把其餘的部分放到ggplot方面。 – alistaire

+0

爲什麼不能@alistaire?它是不好的形式/誤導性,還是更壞的技術原因? – RGecon

+0

我想到了'plot(x [dummy == 1],xaxt =「n」)',然後使用'axis'將日期放入(或者在'ggplot'中的等價結構),但是不能弄清楚如何使用'dummy == 1'子集添加日期。 – RGecon

回答

0

三選擇:

1 GGPLOT2顯然,ggplot2would not allow for a discontinuous axis但是你可以使用facet_wrap獲得類似的效果。

# get the data 
    x = rnorm(50) 
    df <- data.frame(x = x, 
        Dates = seq(as.Date("2008-1-1"), by = "day", length.out = length(x)) , 
        dummy = c(rep(1, 25), rep(0, 10), rep(1, length(x) - 35))) 

    df$f <- ifelse(df$Dates <= "2008-01-25", c("A"), c("B")) 

# plot 
    ggplot(subset(df, dummy==1)) + 
    geom_point(aes(x= Dates, y=x)) + 
    facet_wrap(~f , scales = "free_x") 

enter image description here

2.基礎R

plot(df$x ~ df$Dates, col= ifelse(df$f=="A", "blue", "red"), data=subset(df, dummy==1)) 

enter image description here

3. plotrixAnother alternative would be to use gap.plot{plotrix}。代碼將如下所示。但是,我無法弄清楚如何在軸上使用date值進行中斷。也許這會和另外的問題。

library(plotrix) 

gap.plot(Dates[dummy == 1], x[dummy == 1], gap=c(24,35), gap.axis="x") 
+0

謝謝,但這似乎在劇情中產生了一定的差距。我想要的是相反的:標準情節有一個我不想要的差距。 – RGecon

+0

我已更正了代碼。它回答你的問題嗎? –

+1

謝謝。對於像我這樣的新手來說,一個提示:ggplot解決方案(1)中的data.table命令可以被data.frame替換,然後不需要其他包。 – RGecon

0

我想我想通了。按照我上面提出的方法,我必須長時間撥弄axis命令才能將日期標籤放在正確的位置。以下是我使用的:

plot(x[dummy == 1], xaxt = "n", xlab = "") # plot with no x-axis title or tick labels 
Dates1_index <- seq(1,length(Dates1), by = 5) # set the tick positions 
axis(1, at = Dates1_index, labels = format(Dates1[Dates1_index], "%b %d"), las = 2) 

成功後,我現在同意@alistaire的看法,這看起來很具誤導性。也許,如果我把一個垂直虛線在休息...