无法将x轴设置为ggplot2中的日期

时间:2013-08-31 00:29:58

标签: r plot ggplot2

第一次发表海报,很长一段时间潜伏在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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

通过设置

让它工作
scale_x_continuous(labels=Date_Vec, Breaks=(as.numeric(history[,ProductionDate])))

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