4

興味深い難問があります。探しているタイプのチャートをインタラクティブに作成できますが、自動的には作成できません。または、ほぼ自動的に取得しましたが、何かが壊れました。(投稿の最後のデータ例)。

ループは希望どおりに機能していますが、geom_vline()ステートメントを追加するとエラーが発生します(本番環境での重要な変更を示します)。私はループの外でそれを試してみましたが、以下の詳細で問題を再現することができます。

次の手順があります。

  • 変更のリストを使用してベクトルを作成します。

changeVector <- c(as.Date("2011-11-30"),as.Date("2011-12-05"))

  • [WORKS]以下のデータを使用してプロットを作成すると、次のように機能します。

ggplot(df,aes(x=OBSDATE,y=AVG_RESP))+geom_line(aes(group=REGION,color=REGION))

  • [WORKS] geom_vline(xintercept = c(15308,15313))を追加しようとすると、機能します(ただし、geom_vlineが最後にある場合のみ)。

ggplot(df,aes(x=OBSDATE,y=AVG_RESP))+geom_line(aes(group=REGION,color=REGION))+geom_vline(xintercept=c(15308,15313))

  • [FAIL] geom_vline(xintercept = changeVector)を追加しようとしました-何らかの理由でこれに問題があり、ベクトル値を正しく認識するためにas.numericを追加する必要がありました:

ggplot(df,aes(x=OBSDATE,y=AVG_RESP))+geom_vline(xintercept=as.numeric(changeVector))+geom_line(aes(group=REGION,color=REGION))

このステップを実行すると、非常に便利なエラーメッセージが表示されます。 Error: Non-continuous variable supplied to scale_x_continuous.

それで、何かアイデアはありますか?geom_vlineに美的コンポーネントを追加しようとしても、進歩はありません。vlineはデータではなくコンテキストであるため、geom_lineの前にgeom_vlineを配置することが私の望みでした。

ご協力ありがとうございました!

データのサブセット(dataFile name df)は次のとおりです。

OBSDATE REGION COUNT AVG_RESP
2011-11-29     EMEA   293 4.430375
2011-11-30     EMEA   299 4.802876
2011-12-01     EMEA   292 4.362363
2011-12-02     EMEA   293 4.209829
2011-12-03     EMEA   294 4.262959
2011-12-04     EMEA   294 4.207959
2011-12-05     EMEA   293 4.172594
2011-12-06     EMEA   293 4.230887
2011-12-07     EMEA   298 4.259329
2011-12-08     EMEA   293 4.197645
2011-11-29 Americas   296 2.841182
2011-11-30 Americas   296 2.932196
2011-12-01 Americas   292 2.766438
2011-12-02 Americas   293 2.819556
2011-12-03 Americas   291 2.710584
2011-12-04 Americas   295 2.728407
2011-12-05 Americas   290 2.764310
2011-12-06 Americas   290 2.817483
2011-12-07 Americas   295 2.733864
2011-12-08 Americas   291 2.732405
2011-11-29     APAC   328 7.294024
2011-11-30     APAC   325 7.091046
2011-12-01     APAC   314 6.969236
2011-12-02     APAC   327 6.920428
2011-12-03     APAC   325 7.226308
2011-12-04     APAC   324 7.046296
2011-12-05     APAC   318 7.075094
2011-12-06     APAC   317 7.016467
2011-12-07     APAC   318 7.187358
2011-12-08     APAC   318 7.310220
4

1 に答える 1

4

なぜそうなっているのか正確にはわかりませんが、データラインの後ろに垂直線を保持する回避策を次に示します。

ggplot(df,aes(x=OBSDATE,y=AVG_RESP)) + 
  geom_blank() +
  geom_vline(xintercept=as.numeric(changeVector)) + 
  geom_line(aes(group=REGION,color=REGION))

編集:

別の回避策は次のとおりです。ggplotが推測するのではなく、x軸が日付になるように明示的に指定します。推測すると、プロットされた最初のレイヤー、つまり垂直線が表示されます。xintercept日付ではなく数値として指定する必要があることを考えると、x軸は連続/数値であると見なされます。次のレイヤーが描画されると、x軸の日付をそのレイヤーにマッピングできず、エラーがスローされます。

ggplot(df,aes(x=OBSDATE,y=AVG_RESP)) + 
  geom_vline(xintercept=as.numeric(changeVector)) + 
  geom_line(aes(group=REGION,color=REGION)) +
  scale_x_date()
于 2012-04-16T20:04:26.530 に答える