在R中操作带有时间轴(日期戳)的图

时间:2014-06-25 12:34:24

标签: r time-series

以下R代码创建一个图形,其中包含两个控制x轴范围的交互式滑块:

library(manipulate)
x = 1:100
y = 1:100*2
manipulate(plot(x, y, xlim=c(x.min,x.max)),
           x.min = slider(min(x),max(x)),
           x.max = slider(min(x),max(x)) )

现在我想做同样的事情,但x值是一个时间序列。例如:

# Create a date vector length 100 in day increments from the date "2014-01-01"
x = seq(from=as.POSIXct("2014-01-01"), by=as.difftime(1, units="days"), length.out=100)
y = 1:100*2
manipulate(plot(x, y, xlim=c(x.min,x.max)),
               x.min = slider(min(x),max(x)),
               x.max = slider(min(x),max(x)) )

然而,我收到错误:

  

滑块出错(min(x),max(x)):     min,max,amd initial必须都是数值

我认为这是因为min(x)不是数字,而是日期。但是我怎么能用日期呢?

1 个答案:

答案 0 :(得分:1)

我已根据以下SO链接提出您的问题:How to manipulate (using manipulate pkg) ggplot2 with time-stamped axis?

在使用manipulate之前,最好将xy列表合并到数据框中。我还将你的POSIXct班级改为Date,因为H:M:S只是" 00:00:00"。

> df <- data.frame(x = seq(from=as.POSIXct("2014-01-01"), by=as.difftime(1, units="days"), length.out=100), y = 1:100*2)
> df$x <- as.Date(df$x, format = "%Y-%m-%d")
> with(df, manipulate(plot(x, y, xlim=c(x.min, x.max), xlab = "Date", ylab = "Value"),
+            x.min = slider(as.numeric(min(x)),as.numeric(max(x)), label = "Minimum Date"),
+            x.max = slider(as.numeric(min(x)),as.numeric(max(x)), label = "Maximum Date") 
+            )
+      )

您会注意到您的滑杆值是数字,但图表上的最终输出位于&#34;日期&#34;格式。