r - 奇怪的 "Non-continuous variable supplied to scale_x_continuous Error"

标签 r ggplot2 visualization time-series

我有一个有趣的难题。我可以交互式地创建我寻找的图表类型,但不能自动创建。或者,我几乎自动拥有它,但有些东西坏了。 (帖子末尾的示例数据)。

我的循环按照我想要的方式工作,但是当我添加一些 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))
  • [失败] 尝试添加 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 是上下文,而不是数据。

    感谢您的帮助!

    这是数据的子集(数据文件名称 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
    

    最佳答案

    我不确定为什么要这样做,但这里有一个解决方法,可以将垂直线保持在数据线后面:

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

    关于r - 奇怪的 "Non-continuous variable supplied to scale_x_continuous Error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10180373/

    相关文章:

    python - 什么轻量级 python 库,用于简单的 3D 科学可视化

    python - 具有不同轴范围的 Pandas 平行图

    r - 基于两个变量进行分组,包括它们各自的组合(例如 A - B 与 B - A 相同)

    r - 如何调整树状图(R)中x轴的大小?

    r - 缺失数据的区域从 geom_sf/ggplot2 map 中删除。为什么?

    r - R 3.2.3 中的 ggplot2 : layers broken?

    用于生成交互式图形的 Java 库

    python - Python igraph 中 R igraph graph_from_data_frame() 函数的等效项?

    r - 在数值向量中查找模式

    r - ggplot2 和 GLM : plot a predicted probability