用ggplot绘制R中几个大型时间序列的故障

时间:2016-02-11 03:21:14

标签: r datetime plot ggplot2 time-series

我有一个包含16个独立时间序列的大型数据集。我想在3x7网格中绘制它们,其中顶行是以IN结尾的每个时间序列,最下面的行是以OUT结尾的每个时间序列。在中间行,我将重复以RN结尾的两个时间序列中的每一个,每个时间序列对应于每个IN / OUT对。我已经设置了我认为必须完成的逻辑和语法,但我仍然在努力处理数据类,并且无法使脚本运行足够长的时间来调试其余的。我在R比较陌生,所以我不确定如何继续。

library(ggplot2)

numbers <- read.csv("./AllData.csv", header=TRUE) 
num <- (ncol(numbers) - 4)/4*3 #converts 36 columns to 24 plots involving 8 timeseries

par(mfrow=c(3,7))
for(i in 1:num){
  if (i < 8) {
    qplot(as.POSIXct(as.Date(numbers[4*i+1])), numbers[4*i+2], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i+2,1])
  } else if (i < 15) {
    qplot(as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M"), numbers[4*i-5], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i-5,1])
  } else {
    qplot(as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M"), numbers[4*i-12], data="numbers", xlab="Date", ylab="Feet", main=numbers[4*i-12,1])
  }

代替“as.POSIXct”,我还尝试了“as.Date”,“as.POSIXlt”,只是按原样绘制数据集,但都导致类似的错误通知我ggplot无法使用我使用的任何课程。我已尝试使用下面的基本绘图功能,但接收到的错误是我的x和y具有不同的长度,我已检查并且长度相等。

par(mfrow=c(3,7))
for(i in 1:num){
  if (i < 8) {
    x <- as.POSIXct(as.character(numbers[4*i+1]), format="%m/%d/%Y %H:%M")
    x <- numbers[4*i+1]
    y <- numbers[4*i+2]
    main <- numbers[4*i+2,1]
  } else if (i < 15) {
    x <- as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M")
    y <- numbers[4*i-5]
    main <- numbers[4*i-5,1]
  } else {
    x <- as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M")
    y <- numbers[4*i-12]
    main <- numbers[4*i-12,1]
  }
  plot(x, y, type="l", xlab="Date", ylab="Feet", heading=main)
}

任何智慧或指导都将受到赞赏。这是我的数据集:https://drive.google.com/file/d/0BzEFYP8cpjHpUlluSlNZaTN1RDA/view?usp=sharing

1 个答案:

答案 0 :(得分:1)

这里有一些我已经改变的事情,[(子集化)与[[(索引)混淆,ggplot数据框被指定为字符变量(导致ggplot无法处理字符变量的错误消息),列名(读入names属性)与第一行混淆等。

公平地说,一开始每个人都会遇到这种情况。我强烈建议阅读Hadley Wickham的前两章&#34; Advanced-R&#34;编程书(或类似的东西),然后再尝试其他雄心勃勃的东西。您将看到我的意思,如果一个人不理解名称(和其他属性),子集,数据框和列表(数据框是R中的专用列表),那么使用R非常困难。< / p>

在线版本的链接位于:http://adv-r.had.co.nz/

首先尝试让一些小例子正常工作。这太开始了。

无论如何这里是更正后的代码:

library(ggplot2)

numbers <- read.csv("./AllData.csv", header=TRUE) 
num <- (ncol(numbers) - 4)/4*3 #converts 36 columns to 24 plots involving 8 timeseries

par(mfrow=c(3,7))
for(i in 1:1){
  if (i < 8) {
    qplot(as.Date(numbers[[4*i+1]],"%m/%d/%Y %H:%M"), numbers[[4*i+2]], xlab="Date", ylab="Feet", main=names(numbers)[4*i+2])
#    qplot(as.POSIXct(as.character(numbers[4*i+1]), format="%m/%d/%Y %H:%M"), numbers[[4*i+2]],  xlab="Date", ylab="Feet", main=numbers[4*i+2,1])
  } else if (i < 15) {
    qplot(as.Date(numbers[[4*i-6]],"%m/%d/%Y %H:%M"), numbers[[4*i-5]],  xlab="Date", ylab="Feet", main=names(numbers)[4*i-5])
#    qplot(as.POSIXct(as.character(numbers[4*i-6]), format="%m/%d/%Y %H:%M"), numbers[[4*i-5]],  xlab="Date", ylab="Feet", main=numbers[4*i-5,1])
  } else {
    qplot(as.Date(numbers[[4*i-13]],"%m/%d/%Y %H:%M"), numbers[[4*i-12]], xlab="Date", ylab="Feet", main=names(numbers)[4*i-12])
#    qplot(as.POSIXct(as.character(numbers[4*i-13]), format="%m/%d/%Y %H:%M"), numbers[[4*i-12]], xlab="Date", ylab="Feet", main=numbers[4*i-12,1])
  }
}

这是情节(我将其缩减为一个情节,因为它们需要很长时间):

enter image description here