如何修复绘制散点图时的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
相关产品推荐
相关产品推荐

