我有一个有趣的难题。我可以交互式地创建我寻找的图表类型,但不能自动创建。或者,我几乎自动拥有它,但有些东西坏了。 (帖子末尾的示例数据)。
我的循环按照我想要的方式工作,但是当我添加一些 geom_vline() 语句时遇到了错误(对我们来说,表示我们的生产环境发生了重大变化)。我已经尝试在循环之外解决它,并且能够使用下面的详细信息重新创建问题。
我有以下步骤:
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))
ggplot(df,aes(x=OBSDATE,y=AVG_RESP))+geom_line(aes(group=REGION,color=REGION))+geom_vline(xintercept=c(15308,15313))
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/