You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggplot绘制速度时间序列棒图触发date_trans报错如何解决

问题排查与修正

你代码的报错来自以下几处核心错误:

  • 定义Date向量时没有加引号,R会将2016-08-01识别为数值减法运算,最终得到的是数字而非日期值
  • 日期转换逻辑不符合语法要求:DF$Date <- as.Date(1,as.Date(DF$Date,origin = "2016-08-04"))这行写法错误,导致最终DF$Date不是合法的Date类对象,直接触发你看到的报错
  • geom_rect中xmin的日期字符串写错,年份少写了数字2,016-08-04是不合法的日期值
  • xend计算时使用dhours生成的时长加在Date类型上会导致类型不匹配,需要统一坐标类型

修正后可直接运行的完整代码

# 加载依赖包
library(ggplot2)
library(lubridate)
library(scales)

Speed <-c(24,23,23,24,26,27,27,27,26,24)
Dir <- c(108,105,103,100,97,96,97,99,101,103)
# 修正:日期字符串加引号
Date <-c("2016-08-01","2016-08-02","2016-08-03","2016-08-04","2016-08-05","2016-08-06","2016-09-07","2016-09-08","2016-09-09","2016-09-10")

DF <-data.frame(Speed,Dir,Date)
# 修正:正确转换日期格式
DF$Date <- as.Date(DF$Date, format = "%Y-%m-%d")

ggplot(DF) +
  geom_segment(aes(x = Date,
                   y = 0,
                   # 修正:将小时偏移转为天数偏移,保持Date类型一致
                   xend = Date + (Speed * 1 * -cos((90-Dir) / 360 * 2 * pi))/24,
                   yend = Speed * 1 * -sin((90-Dir) / 360 * 2 * pi),
                   col = factor(Date)
  ),
  arrow = arrow(length = unit(0.5, "cm")) ) +
  geom_point(aes(Date, 0), size = 1) +
  scale_x_date(labels = date_format('%b'), breaks = date_breaks('1 month'))+
  coord_fixed(3600) +
  theme(legend.position = "none")+
  # 修正:补全年份,增加透明度避免遮挡底层元素
  geom_rect(aes(xmin = as.Date("2016-08-04", "%Y-%m-%d"), 
                xmax = as.Date("2016-09-18",  "%Y-%m-%d"),ymin = -Inf,ymax = Inf), alpha = 0.1)

内容的提问来源于stack exchange,提问作者okscientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:54:03