r-创建带衰退带的ggplot时出现错误消息



我有一个数据集,它绘制了失业率随时间的变化,我想添加突出显示经济衰退时的带。

原始数据帧称为季度数据。

recession <- data.frame(date_start= as_date(c("1973-07-01", "1980-01-01", "1990-07-01","2008-04-01")),
date_end = as_date(c("1975-07-01","1981-04-01", "1991-07-01","2009-04-01")))
recession$date_start <- ymd (recession$date_start)
recession$date_end <- ymd (recession$date_end)

ggplot(quarterly_data, aes(x=date, y= Unemployment))+
geom_line()+
geom_rect(data = recession, inherit.aes=FALSE , aes(xmin = date_start, xmax = date_end, ymin = -0.1, ymax = 0.1),
fill = "red", alpha= 0.3)

然而,当我运行ggplot时,我会收到以下错误消息:

Error: Invalid input: time_trans works with objects of class POSIXct only

有人知道怎么解决这个问题吗?

虽然您向我们提供了数据帧recession,但您没有向我们提供数据帧quarterly_data,在那里您会得到错误。这里有一些建议可以尝试,但首先,对造成这个问题的原因进行一些描述。

首先,time_trans似乎来自scales包,但不清楚为什么需要基于上面的代码运行。这里还有什么可以使用scales包的东西吗?

现在,对于错误消息本身,它只需要POSIXct类的对象。这与Date类的对象不同,后者是从您正在使用的lubridate包中创建的,从使用as_date创建recession数据帧可以明显看出。

您可以通过运行class(recession$date_start)自己确认这一点,在那里您可以看到输出是一个Date类对象。

ymd()函数之后,您还将获得一个类为Date的对象。从文档中,您应该能够通过提供tz=(时区(参数来强制将类转换为POSIXctPOSIXt。您可以通过以下内容看到这一点:

> class(ymd(recession$date_start))
[1] "Date"
> class(ymd(recession$date_start, tz='GMT'))
[1] "POSIXct" "POSIXt" 

所以,这可能会解决你的问题。但是,您还有一些侦探工作要做,因为我们没有您的其他数据帧,而且我们显然没有看到试图从scales包调用time_trans的函数。这里的另一种可能性是ggplot调用它来调整基于POSIXt对象的轴。。。但我没有看到可能导致此错误的scale_调用或coord_flip()。我推荐以下顺序:

  • 尝试"homerun"方法,再次运行ymd()函数,但提供tz="GMT"以强制输出为POSIXct对象。不确定这是否会成功。

  • 运行ggplot()线路本身。你有同样的错误吗?如果是,则错误位于quarterly_data数据帧内,而不是recession数据帧内。如果有效,则运行ggplot()行并添加geom_line()对象。如果它仍然有效,那么问题在于geom_rect函数,这可能意味着recession数据帧。

  • 检查quarterly_data中日期对象的类别。它们是Date类还是POSIXct类?如果是Date,请尝试将它们转换为POSIXct(可能只使用as.POSIXct()(。

  • 你的绘图调用中还有更多属于这里的代码吗?如果您在绘图代码中添加了coord_flip()或任何scale_x或其他主题元素,他们肯定会试图调整时间刻度,从而导致错误。

相关内容

最新更新