0

一个新手问题。(添加了新信息)

我有一组随机收集的时间戳数据。我喜欢创建一个绘图矩阵,但我无法使用散点图或 xyplot 和时间对象创建。

我的数据

dataset$Time  #POSIX time objects (no set sampling period)
              #i built POSIX time objects by dataset$Time<-strptime(tt, "%H:%M:%OS")
              #the origial string was formated like this 12:12:12.234 (HH:MM:SS:msec)
dataset$d1, dataset$d2 #integers
dataset$d3 #factor with 10 levels

.

我可以做这些

plot( dataset$Time, dataset$d1)
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)

但是,我不能这样做(x 轴上的 POSIX 时间对象)

scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)

新信息

结构错误(.Internal(as.POSIXct(x, tz)), class = c("POSIXt", "POSIXct"), : 无效的 'x' 参数。

新信息)但这有效(y轴上的POSIX时间对象)

xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset)

相关但不同的问题是 hexbin。将时间对象添加到 hexbin 时,来自 hexbin 的绘图不会在单位上显示正确的时间格式。

bin<-hexbin(dataset$Time, dataset$d1) 
plot(bin))

我该怎么办?

感谢您调查它!

4

3 回答 3

2

显然,R 在处理 POSIX 时代的成瘾问题时遇到了一些问题……它给了我错误:

(x[floor(d)], x[ceiling(d)]) 中的错误+.POSIXt:未为“POSIXt”对象定义二进制“+”

只需将它们转换为数字就可以了。您可以隐藏相应的轴并在以后使用正确的日期重新绘制它

例如:

scatterplot(dataset$d1 ~ as.numeric(dataset$Time) | dataset$d3, data=dataset, xaxt="n")
axis(1, at=as.numeric(dataset$Time), labels=dataset$Time, cex.axis=0.5)
于 2010-06-22T07:17:31.583 回答
2

对我来说它只是工作,所以你可能有一个错误格式的时间向量。当你打电话时你会得到什么class(dataset$Time)?它应该包含“POSIXct”才能正常工作。

另一方面,dataset$如果您提供data=dataset.

于 2010-06-22T07:45:53.963 回答
2

这是一个工作示例。您可能弄错了数据格式——需要注意精确的数据格式。

首先,一个简单的数据框:

R> X <- data.frame(pt=Sys.Date()+0:4, x1=100+cumsum(rnorm(5)),
+                                     x2=90+cumsum(rt(5,4)))
R> X
          pt     x1    x2
1 2010-06-22  98.73 90.33
2 2010-06-23  99.43 89.56
3 2010-06-24  98.85 86.95
4 2010-06-25  99.08 88.52
5 2010-06-26 100.30 94.08
R> 

这就是格子不使用的所谓格式。您需要将其转换为格式。我在这里使用,你也可以使用and from the reshape 包:stack()cast()melt()

R> Y <- data.frame(pt=rep(X$pt,2), stack(X, select=c(x1,x2)))
R> Y
           pt values ind
1  2010-06-22  98.73  x1
2  2010-06-23  99.43  x1
3  2010-06-24  98.85  x1
4  2010-06-25  99.08  x1
5  2010-06-26 100.30  x1
6  2010-06-22  90.33  x2
7  2010-06-23  89.56  x2
8  2010-06-24  86.95  x2
9  2010-06-25  88.52  x2
10 2010-06-26  94.08  x2
R> 

现在xyplot调用很简单:

R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines)

你当然可以使用更复杂的条件表达式。

于 2010-06-22T11:57:23.077 回答