5

私は2つの時系列をプロットし、その時点でどちらの系列が大きいかに従って、系列間のスペースをシェーディングすることを望んでいました。

ここに2つのシリーズがあります-最初はデータフレームにあり、その時点で大きい方のシリーズのインジケーターがあります

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"))

その結果...

結果のプロット

プロットの真ん中に余分な青いバンドがあるのはなぜですか?

4

1 に答える 1

9

これが解決策です。data = d1[d1$big == "B",]最初の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))), ])

d1$big == "B"シーケンスの最初と最後の行には異なる値が含まれcsaていることが多いため、これが必要です。csbその結果、データを接続するリボンが表示されます。上記のコマンドは、これらのシーケンスの前の最後の行と後の最初の行を、最初のリボンのデータとともに使用します。d1$big == "A"この問題は(2番目のリボンのベース)には存在しません。

完全なコード:

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"))

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

于 2012-10-28T11:41:21.143 に答える