第一次发帖,长期潜伏在R问题上......
我终于被难住了 48 小时,我要打败你们所有人;但希望不会长久!
我有一个不规则的时间序列,我试图用 ggplot 2 绘制。我希望休息和标签只显示我们有数据的日子。
保存日期的变量作为从 excel 中读取的因子开始,我将其转换为上课日期:
Dataset[,BatchDateCol] <- as.Date(Dataset[,BatchDateCol],format="%m/%d/%y")
(这是一个更大系统的一部分,所以我不能只是以不同的方式读取数据)
我以我想要的格式创建标签向量:
Date_Vec <- c(history[,BatchDateCol])
Date_Vec <- format(Date_Vec, "%b %d")
然后我汇总这些天以获得每天的手段:
history <- ddply(Dataset, BatchDateCol, function(z) colMeans(z[RawLocation]))
现在我想绘制它,为此我找到带有日期的列和感兴趣的变量:
ProductionDate <- grep(BatchDateCol,colnames(history))
Location <- grep(GGVar, colnames(history))
这就是问题的开始;我可以像这样很好地创建我的情节:
plot2 <- ggplot(history, aes_string(x=history[ProductionDate], y=history[(Location)]))
plot2 + xlab(XAxisName) +ylab(GGVar)+geom_line(aes_string(y=means), linetype="dashed")
plot2 + geom_point() + geom_smooth(method="lm", formula=y~poly(x,1))
但是当我尝试将日期添加到 x 轴时,我得到错误、没有绘图或没有中断+标签。这 2 个命令绘制了正确的图,但没有中断或标签:
scale_x_continuous(labels=Date_Vec, breaks=c(1:length(history[,BatchDateCol])),
expand=c(.01,0))
&
scale_x_continuous(labels=Date_Vec, breaks=c(1:length(history[,BatchDateCol])),
limits=c(min(as.numeric(history[,BatchDateCol])),
max(as.numeric(history[,BatchDateCol]))))
此命令绘制正确的中断和标签,但没有绘图(...!)
scale_x_continuous(labels=Date_Vec,
limits=c(1,length(history[,BatchDateCol])), expand=c(.01,0))
当我只用它绘制它时:
scale_x_continuous(labels=Date_Vec, expand=c(.01,0))
它有时有效,但大多数时候我得到:
scale_labels.continuous(scale, major) 中的错误:中断和标签的长度不同
如果我没有在 scale_x_continuous 中指定标签,我会得到我想要的日期的数字形式(自 1970 年以来的天数或其他)(虽然我不确定它是否在正确的位置绘制它),但我想不通找出如何修改它。
最后,我尝试将 scale_x_continuous 更改为 scale_x_date:
plot2 + scale_x_date(expand=c(.01,0))
返回错误:(我尝试在 () 中放置一些不同的参数)
错误:输入无效:date_trans 仅适用于 Date 类的对象
我尝试将 Dataset[,BatchDateCol] 作为一个因素或字符向量,这也不起作用。
所以....我完全不知所措,感到难以置信的失败:(
编辑
ProductionDate 是此处定义的带引号的变量:
QC_Process <- function(Dataset, GGVar, XAxisName="TIME SERIES", BatchDateCol, BatchNum=-1, startdate=NULL, enddate=NULL) {...
所以我不能使用 $ 来访问 var。此外,我已经在定义 var 后立即应用 unique (`history <- unique(history)')
(这是一个大型 R Shiny 应用程序的生产代码,属于我的雇主,所以我不能发布太多内容......)
当我使用时,breaks=(history[,ProductionDate])
我得到:
as.Date.numeric(value) 中的错误:必须提供“原点”
当我使用 'breaks=(history[ProductionDate])' 我得到:
is.finite(x) 中的错误:未为类型“列表”实现默认方法
print(history[ProductionDate])
返回:
消费日期
1 2012-03-24
2 2013-03-11
3 2013-05-10
4 2013-05-11
5 2013-05-13
6 2013-05-16