2

第一次发帖,长期潜伏在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

4

2 回答 2

3

scale_x_continuous(breaks=unique(history$ProductionDate))应该这样做(但我不能完全复制你的代码,因为我没有原始的Dataset,所以我无法测试这个解决方案。

于 2013-08-31T01:01:36.217 回答
1

通过设置让它工作

scale_x_continuous(labels=Date_Vec, Breaks=(as.numeric(history[,ProductionDate])))

仍然不确定它为什么起作用,当我有连续的日期时,标签有时会重叠,但这是进步!

于 2013-09-01T17:40:42.153 回答