如何将图中的x值作为函数内的日期?

时间:2013-04-11 09:01:08

标签: r text plot

我有三个文本文件,每个文件只包含4列(每列有477个值)。我设法将它们描绘成: 绘制每个文本文件的第一列,并对其余列进行相同的操作(附图)。如您所见,x轴显示为数字,但我需要将其显示为日期,因此我尝试指定我想要的日期,但是我得到了与长度相关的错误。我确信日期范围03/09/2010至23/12/2012的长度与值477相同。我很感激任何帮助。

ref= read.table("D:\\AS_asc.txt", sep="",header=TRUE)
sour1 = read.table("D:\\rre.txt", sep="",header=TRUE) 
  sour2= read.table("D:\\re_asc.txt", sep="",header=TRUE)
  starttime <- strptime("20100903", "%Y%m%d")
   endtime <- strptime("20111223 ", "%Y%m%d")
     xrange <- c(starttime, endtime)
   columns <- paste0("X", 1:4)
   par(mfrow=c(2,2))
  lapply(
 columns,
  function(column)
  {

 plot(xrange,
   ref[[column]],

   ylab = "[[column]]",
  xlab = "[[column]]",
   col  = 2 , main = paste( column )
 )

points(sour1[[column]], col = 'green')
 points( sour2[[column]], col = 'blue')

 }
 )

我收到了这个错误:

 Error in xy.coords(x, y, xlabel, ylabel, log) : 
 'x' and 'y' lengths differ

我的数据样本:

        "X0" "X1" "X2" "X3" 
  0.0369809285234571 0.0222775883686665 0.031094652297596 0.0814025488998284 

1 个答案:

答案 0 :(得分:2)

问题在于这一行:xrange <- c(starttime, endtime)。这会创建一个只有两个日期的向量。您试图将这两个日期与477数据的向量进行绘制,因此出错。解决方案是创建一系列477个日期以匹配数据。 xrange <- seq(from=as.Date(starttime), to=as.Date(endtime), by=1)

我还修复了您的points请求,将日期向量包含为x。

ref= data.frame(matrix(runif(477*4),ncol=4))    #dummy random data
sour1 = data.frame(matrix(runif(477*4),ncol=4)) #dummy random data
sour2= data.frame(matrix(runif(477*4),ncol=4))  #dummy random data
starttime <- strptime("20100903", "%Y%m%d")
endtime <- strptime("20111223 ", "%Y%m%d")
xrange <-  seq(from=as.Date(starttime), to=as.Date(endtime), by=1) #create date vector
columns <- paste0("X", 1:4)
par(mfrow=c(2,2))
lapply(
 columns,
  function(column)
  {
   plot(xrange,
   ref[[column]],

   ylab = "Unit of the y data",    #more descriptive label
   xlab = "Date",                   #more descriptive label
   col  = 2 , main = paste(column)
   )
points(xrange, sour1[[column]], col = 'green') #add date range
points(xrange, sour2[[column]], col = 'blue') #add date range
 }
)

enter image description here