【问题标题】:ggplot adding vertical line on Date axisggplot在日期轴上添加垂直线
【发布时间】:2017-08-25 18:18:58
【问题描述】:

我正在尝试在日期轴上的特定日期添加一条垂直线。基于this SO post,我似乎需要将日期转换为数字,但这对我不起作用。我做错了什么?

我的错误:

Error: ggplot2 doesn't know how to deal with data of class uneval

我的代码

library(lubridate)
trump_score<-NULL
trump_score$Date <-parse_date_time(c("2017-01-01","2017-01-24","2017-01-25"), orders="ymd")

trump_score$powerSentimentScore<-c(10,25,10)
denyTPP<-parse_date_time("2017-01-23", orders="ymd ")

require(ggplot2)
ggplot( aes(trump_score$Date))+
  geom_line(aes(y=trump_score$powerSentimentScore),colour="green")+
  geom_vline(aes(xintercept = as.POSIXct(as.Date(denyTPP))), linetype="dotted", color = "blue", size=1.5)

【问题讨论】:

  • ggplot2 旨在与 data.frames 一起使用,data 参数是ggplot 中的第一个参数。如果您真的不想使用 data.frames ,则需要将参数命名为:ggplot(mapping = aes(trump_score$Date) ) 这样您就不会将映射传递给 data 参数。有了情节后,geom_vline 中日期的 as.numeric 解决方案将起作用。
  • 使用 ggplot2 的 annotate 函数绘制非表格的东西。

标签: r date ggplot2


【解决方案1】:

这是我的代码:

library(lubridate)
trump_score<-NULL
trump_score$Date <-parse_date_time(c("2017-01-01","2017-01-24","2017-01-25"), orders="ymd")

trump_score$powerSentimentScore<-c(10,25,10)
denyTPP<-parse_date_time("2017-01-23", orders="ymd ")

trump_score2<-data.frame(trump_score)
trump_score2$Date<-as.Date(trump_score2$Date)

require(ggplot2)
ggplot(trump_score2, aes(Date, powerSentimentScore))+
geom_line(colour="green")+
geom_vline(aes(xintercept=as.numeric(Date[c(2)]) ), linetype="dotted", color = "blue", size=1.5)

顺便说一句,我不确定xintercept() 是否是添加行的最佳方式,因为您的添加行与“trump_score”日期框架中的任何 Date col 都不匹配。

如果您有任何问题,请告诉我。

【讨论】:

  • 我正在寻找一个可以接受日期的解决方案,找到它在 x 轴(日期)上的位置并绘制它 - 我会尽量让我的问题更清楚