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

如何修复绘制散点图时的date_trans仅支持Date类对象错误

问题解决:绘制FRED数据散点图时的日期转换错误

错误原因

报错"Error: invalid input: date_trans works with objects of class Date only"的核心问题是:你给**数值型的x轴变量(失业率差值)**错误使用了scale_x_date()函数,该函数仅支持日期类型变量,与当前x轴的数值属性不匹配。

修正后的完整代码

1. 加载依赖包并获取数据

library(quantmod)
library(ggplot2)
library(ggpubr) # 用于stat_cor相关性标注
library(scales) # 用于数值千分位格式

fredsym <- c("UNRATE","JTSJOR")
for (i in 1:length(fredsym)){
  getSymbols(fredsym[i], src="FRED")
}

2. 创建带明确列名的数据框

# 处理失业率差值,为列命名避免混乱
unemployment_diff <- diff(UNRATE)
unemployment_diff_bar.df <- data.frame(
  date = time(unemployment_diff),
  unrate_diff = coredata(unemployment_diff)
)

# 处理职位空缺差值,同理命名列
job_vacancy_diff <- diff(JTSJOR)
job_vacancy_diff_bar.df <- data.frame(
  date = time(job_vacancy_diff),
  jtsjor_diff = coredata(job_vacancy_diff)
)

3. 按日期合并数据框

# 指定按date列合并,仅保留两个序列都有数据的行
beveridge_curve <- merge(unemployment_diff_bar.df, job_vacancy_diff_bar.df, by = "date", all = FALSE)

4. 绘制散点图(修正错误逻辑)

scatter_plot <- ggplot(beveridge_curve, aes(x = unrate_diff, y = jtsjor_diff)) +
  geom_point(alpha = 0.7) + # 添加透明度避免点重叠
  stat_cor(label.x = 1, label.y = 1200) + # 根据轴范围调整相关性标签位置
  labs(
    title = "Beverridge Curve: 失业率变化 vs 职位空缺变化",
    x = "失业率变化(百分点)",
    y = "职位空缺变化(千人)",
    caption = "Source: FRED/BLS"
  ) +
  scale_y_continuous(
    limits = c(-500, 1500),
    breaks = seq(-500, 1500, 200),
    labels = comma
  ) +
  scale_x_continuous( # 替换scale_x_date为数值型轴设置
    limits = c(-2, 2),
    breaks = seq(-2, 2, 0.5)
  ) +
  theme_bw() +
  theme(
    legend.title = element_blank(),
    legend.position = "none", # 散点图无分组,无需图例
    axis.text.x = element_text(size = 14, angle = 45, hjust = 1),
    axis.text.y = element_text(size = 14),
    axis.title = element_text(size = 14),
    plot.title = element_text(face = "plain", size = 20, hjust = 0.5, color = "#3333B3FF"),
    panel.border = element_blank(),
    panel.grid.major = element_line(color = "#f0f0f0")
  )

# 输出图形
print(scatter_plot)

关键修正点

  • 给差值列明确命名,避免合并后列名混乱
  • 合并数据时指定by = "date",确保日期匹配准确
  • 移除错误的scale_x_date(),替换为适用于数值变量的scale_x_continuous()
  • 调整stat_cor标签位置,使其适配新的轴范围
  • 移除不必要的图例设置,优化视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:45:45