如何将ts类型rollDE转为data.frame?解决ggplot绘图警告问题
解决ggplot处理时间序列(ts)类型列的警告问题
首先,咱们来拆解下问题:你收到的警告是因为rollDE是时间序列(ts)类型,ggplot对这种类型的变量支持不够友好,没法自动识别合适的尺度。下面给你两种可行的解决方案,从简单修复到更规范的ggplot最佳实践都有:
方案1:直接转换ts类型为数值向量
这是最直接的修复方式,把ts类型的列转换成普通的数值向量,去掉ts的属性即可:
# 将rollDE从ts转换为数值 yy$rollDE <- as.numeric(yy$rollDE) # 顺便给你的DE$DE列重命名(这个列名格式容易出问题) colnames(yy)[colnames(yy) == "DE$DE"] <- "DEreturn"
然后修正你的ggplot代码——注意不要用x$rollDE``这种写法,因为你已经指定了data = yy,直接引用列名更规范,也避免环境查找的问题:
ggplot(yy, aes(x = Date)) + geom_line(aes(y = rollDE, color = "rollingmeanDE")) + geom_line(aes(y = DEreturn, color = "DEreturn")) + xlab('Date') + ylab('percent.change') + # 可选:自定义线条颜色 scale_color_manual(values = c("rollingmeanDE" = "steelblue", "DEreturn" = "firebrick"))
方案2:整理成"整洁数据"格式(推荐)
ggplot最适合处理整洁的长格式数据,这样你只需要调用一次geom_line就能完成绘图,代码更简洁易维护:
# 先加载tidyr包(如果没安装先执行install.packages("tidyr")) library(tidyr) # 将宽格式数据转成长格式,同时处理类型转换和列名问题 yy_tidy <- yy %>% mutate(rollDE = as.numeric(rollDE), DEreturn = `DE$DE`) %>% select(-`DE$DE`) %>% pivot_longer(cols = c(rollDE, DEreturn), names_to = "Series", values_to = "PercentChange") # 绘图 ggplot(yy_tidy, aes(x = Date, y = PercentChange, color = Series)) + geom_line() + xlab('Date') + ylab('percent.change')
为什么之前会出现警告?
ts类型的变量带有时间索引等额外属性,ggplot的尺度系统没法自动识别这种特殊类型,转换成普通数值向量后,ggplot就能正确识别为连续型变量,警告自然就消失了。另外,你之前代码里用x$rollDE``的写法会让ggplot在全局环境查找变量,而不是你指定的yy数据框,这也是不推荐的写法哦。
内容的提问来源于stack exchange,提问作者Enrico Dace
相关产品推荐
相关产品推荐

