第一次发表海报,很长一段时间潜伏在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轴时,我得到错误,没有情节,或没有中断+标签。 这两个命令绘制正确的图,但没有中断或标签:
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的对象
我尝试将数据集[,BatchDateCol]作为因子或字符向量,但也不起作用。
所以....我完全失去了,并且感到难以置信的失败:(
编辑
ProductionDate是这里定义的引用变量:
QC_Process <- function(Dataset, GGVar, XAxisName="TIME SERIES", BatchDateCol, BatchNum=-1, startdate=NULL, enddate=NULL) {...
所以我不能用$来访问var。此外,我已经定义了var之后我已经应用了唯一的(`history&lt; - unique(history)&#39;)
(这是一个大型R Shiny应用程序的生产代码,属于我的雇主,因此我无法发布其中的大部分内容......)
当我使用breaks=(history[,ProductionDate])
时,我得到:
as.Date.numeric(value)出错:&#39; origin&#39;必须提供
当我使用&#39; break =(历史[ProductionDate])&#39;我明白了:
is.finite(x)中的错误:未对类型&#39; list&#39;
实施默认方法
print(history[ProductionDate])
返回:
Date.of.Consumption
1 2012-03-24
2 2013-03-11
2013-05-10
4 2013-05-11
2013-05-13
2013-05-16
答案 0 :(得分:3)
scale_x_continuous(breaks=unique(history$ProductionDate))
应该这样做(但我不能完全复制你的代码,因为我没有原始的Dataset
,所以我无法测试这个解决方案。
答案 1 :(得分:1)
通过设置
让它工作scale_x_continuous(labels=Date_Vec, Breaks=(as.numeric(history[,ProductionDate])))
仍然不确定为什么会这样,当我有连续的日期时,标签有时会重叠, 但这是进步!