使用ggplot绘制带日期轴的垂直线

10

当x轴是一个datetime对象(POSIXct)时,我在向图表添加垂直线时遇到了一些问题。它似乎总是想把线放在Epoch上。以下是一个例子:

df <- data.frame(x=ymd('2011-01-01')+hours(0:24), y=runif(25))
ggplot(df, aes(x=x,y=y)) + geom_point()

无垂直线

现在我尝试在第三个观测时间添加一条线:

ggplot(df, aes(x=x,y=y)) + geom_point() + geom_vline(aes(x=df$x[3]))

带有竖线

我做错了什么吗?

2个回答

5
尝试使用以下方法:
geom_vline(xintercept = df$x[3])

谢谢。看起来xintercept在ggplot文档的美学列表中缺失,而那里的措辞则提到了x。=/ - Ken Williams
是的,这也让我感到困惑。http://had.co.nz/ggplot2/geom_vline.html上的文档说要使用`aes(x=whatever)`,但下面的所有示例都使用了`xintercept`。 - Andrew
1
使用@KenWilliams的示例,我得到以下代码: ggplot(df,aes(x = x,y = y))+ geom_point()+ geom_vline(xintercept = df $ x [3]) 错误:无效的截距类型:应该是一个数字向量、一个函数或一个函数的名称。有什么想法吗? - Andrew Cassidy
2
显然,ggplot现在要求截距是数字而不是POSIXct。以下代码可行: geom_vline(xintercept = as.numeric(df$x[3])) - Andrew
1
这对我来说听起来像是一个回归错误 - 如果轴已经是日期时间类型,那么日期时间应该可以用作截距。 - Ken Williams

1
ggplot(df, aes(x=x,y=y)) + geom_point() + geom_vline(aes(xintercept=df$x[3]))

你需要在你的geom_vline aes中使用xintercept而不是x。

也许你可以查看谷歌搜索结果的第二个和第三个链接,它们似乎回答了你的问题... - Justin
感谢您的帮助。在提交问题之前,我确实查看了那些页面,但没有注意到美学名称的更改。文档中缺少“xintercept”美学,我会尝试提交文档补丁。 - Ken Williams
但是我无法弄清楚文档中生成美学列表的内容,似乎在 https://github.com/hadley/ggplot2/blob/master/R/geom-vline.r 中也没有相关信息。 - Ken Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接