2012-04-16 18 views
4

私は興味深い問題を抱えています。インタラクティブに探しているタイプのチャートを作成できますが、自動的には作成できません。または、私はほぼ自動的にそれを持っていましたが、何かが壊れました。 (投稿終了時のデータ例)。奇妙な "scale_x_continuousエラーに供給される不連続変数"

私は私が望む道を働い私のループを持っていますが、私はいくつかのgeom_vline(当社の生産環境に大きな変化を示す私たちのために、)()ステートメントを追加したときにエラーに遭遇してきました。私はループの外でそれを介して作業を試み、以下の詳細で問題を再現することができました。

私は、次の手順を持っている:[WORKS]は、以下のデータをプロットを作成

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

  • 、それ:

    • は、変更点のリストを持つベクトルを作成作品:

    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](xintercept = changeVector)geom_vlineを追加しよう - 私はいくつかの理由がこれで問題があった、と適切にベクトル値を認識するためにas.numericを追加する必要がありました:
    だから、 Error: Non-continuous variable supplied to scale_x_continuous.

    、任意のアイデア:このステップを実行

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

    、私は素晴らしく便利なエラーメッセージが表示されますか? geom_vlineに美的要素を追加しようとすると、私はまだ進歩しません。私の望みは、vlineがデータではなくコンテキストであるため、geom_lineをgeom_lineに先行させることでした。

    ありがとうございました!ここで

    データ(データファイル名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

私はなぜそれはそれをやっている正確にわからないんだけど、ここでは背後にある縦のラインを保持します回避策ですデータライン:

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

編集:ここでは

は別の回避策です:明示的にx軸であることを指定ggplotを推測するのではなく、日付にすること。推測すると、プロットされた最初のレイヤー、つまり垂直線が見えます。 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() 
+0

ありがとう、ブライアン! ちょっと「ハッキー」な感じですが、うまくいけば機能します! – BenH

+0

scale_x_date()ソリューションでは、これはバグではないと確信していますし、一定の意味合いもあります。人々が発見する方法で文書化するのは難しい。 – joran

+0

EDITは間違いなく良いアプローチです。私はそれがそうであると推測したことはありません。 @joran、scale_x_date()を使用するときは "as.numeric"は必要ありません。少なくとも私には必要ではありませんでした。 – BenH