首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用衰退波段创建ggplot时出现错误消息

使用衰退波段创建ggplot时出现错误消息
EN

Stack Overflow用户
提问于 2020-04-28 16:28:11
回答 1查看 35关注 0票数 0

我有一个数据集,它绘制了一段时间内的失业情况,我想在经济衰退时添加突出显示的波段。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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时,我收到以下错误消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: Invalid input: time_trans works with objects of class POSIXct only

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

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 20:17:55

虽然您为我们提供了data frame recession,但您没有向我们提供data frame quarterly_data,因为您会收到错误。这里有几点要尝试,但首先,要描述一下是什么导致了这个问题。

首先是time_trans appears to be from the scales package,但不清楚为什么需要基于上面的代码运行。这里还有其他可以使用scales包的东西吗?

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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对象。不确定这是否会successful.
  • run ggplot()行本身。你会得到同样的错误吗?如果是,则错误出现在quarterly_data数据帧中,而不是recession数据帧中。如果它可以工作,那么运行ggplot()行并添加geom_line()对象。如果它仍然有效,那么您的问题出在geom_rect函数上,这很可能意味着recession数据框。
  • 检查quarterly_data中的date对象类。它们是Date类还是POSIXct类?如果是Date,请尝试将它们转换为POSIXct (也许只需使用as.POSIXct()).
  • Is,您的plot调用中有更多属于此处的代码?如果您在绘图代码中添加了coord_flip()或任何scale_x或其他主题元素,则它们肯定会尝试调整时间刻度并导致该错误。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61485142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文