首页 文章

奇怪的“非连续变量提供给scale_x_continuous错误”

提问于
浏览
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中添加美学组件,我仍然没有进展 . 我的愿望是让geom_vline在geom_line之前,因为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

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

    编辑:

    这是另一种解决方法:明确指定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()
    

相关问题