17

複数日のデータを含む時系列があります。毎日の間に、データポイントのない期間が1つあります。を使用して時系列をプロットするときに、これらの期間を省略するにはどうすればよいggplot2ですか?

以下に示す人工的な例ですが、データがない2つの期間をどのように取り除くことができますか?

コード:

Time = Sys.time()+(seq(1,100)*60+c(rep(1,100)*3600*24, rep(2, 100)*3600*24, rep(3, 100)*3600*24))
Value = rnorm(length(Time))
g <- ggplot() 
g <- g + geom_line (aes(x=Time, y=Value))
g

ここに画像の説明を入力してください

4

3 に答える 3

21

まず、グループ化変数を作成します。ここで、時差が1分より大きい場合、2つのグループは異なります。

Group <- c(0, cumsum(diff(Time) > 1))

facet_gridこれで、と引数を使用して3つの異なるパネルを作成できますscales = "free_x"

library(ggplot2)
g <- ggplot(data.frame(Time, Value, Group)) + 
  geom_line (aes(x=Time, y=Value)) +
  facet_grid(~ Group, scales = "free_x")

ここに画像の説明を入力してください

于 2013-01-03T10:23:38.520 に答える
9

問題は、ggplot2が欠落している値があることをどのようにして知るのかということです。2つのオプションがあります。

  1. 時系列にNA値を追加します
  2. 「グループ」を表す変数を追加します。例えば、

    dd = data.frame(Time, Value)
    ##type contains three distinct values
    dd$type = factor(cumsum(c(0, as.numeric(diff(dd$Time) - 1))))
    
    ##Plot, but use the group aesthetic
    ggplot(dd, aes(x=Time, y=Value)) +
          geom_line (aes(group=type))
    

    与える

    ここに画像の説明を入力してください

于 2013-01-03T10:23:34.417 に答える
3

csgillespieはNAによるパディングについて言及しましたが、より簡単な方法は、各ブロックの後に1つのNAを追加することです。

Value[seq(1,length(Value)-1,by=100)]=NA

ここで、-1は警告を回避します。

于 2013-01-03T10:26:48.977 に答える