Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot2打印时间序列时出错消息_R_Ggplot2 - Fatal编程技术网

R 使用ggplot2打印时间序列时出错消息

R 使用ggplot2打印时间序列时出错消息,r,ggplot2,R,Ggplot2,我对ggplot2很陌生,不知道是否有人能帮我解决这个简单的问题。我的示例数据帧如下所示。我想根据计数的数量绘制时间(小时和分钟) Date <- c("07/12/2012 05:00:00", "07/12/2012 06:00:00", "07/12/2012 07:00:00", "07/12/2012 08:00:00") Date <- strptime(Date, "%d/%m/%Y %H:%M") Counts <- c("0","3","10","

我对ggplot2很陌生,不知道是否有人能帮我解决这个简单的问题。我的示例数据帧如下所示。我想根据计数的数量绘制时间(小时和分钟)

Date <- c("07/12/2012 05:00:00", "07/12/2012 06:00:00", "07/12/2012 07:00:00",
      "07/12/2012 08:00:00")
Date <- strptime(Date, "%d/%m/%Y %H:%M")
Counts <- c("0","3","10","6")
Counts <- as.numeric(Counts)
df1 <- data.frame(Date,Counts,stringsAsFactors = FALSE)

#Adds time to dataframe.
df1 <- within(df1,{
  posb <- as.POSIXlt(Date,format="%d/%m/%Y %H:%M")
hours <- posb$hour
mins <- posb$min
dates <- format(posb, "%x")
time <- format(posb, "%H:%M")
posb <- NULL  # cleanup
})
#Draw graph (time versus Counts)
library(ggplot2)
g = ggplot(df1, aes(x=time, y=Counts))
g + geom_line()

Date问题是由于
time
变量是一个字符向量:

R> class(df1$time)
[1] "character"
必须将其转换为类
POSIXlt
的对象,例如:

ggplot(df1, aes(x=strptime(time, "%H:%M"), y=Counts)) + geom_line()
或者,更简单的是,您可以直接使用
Date
变量,无需转换:

ggplot(df1, aes(x=Date, y=Counts)) + geom_line()

更好的是,您将看到
ggplot2
根据沿x轴的时间跨度自动标记x轴

编辑:如果要定义x轴限制,可以执行以下操作:

ggplot(df1, aes(x=Date, y=Counts)) + geom_line() + scale_x_datetime(limits=c(as.POSIXct("2012/12/07 04:00:00"),as.POSIXct("2012/12/07 10:00:00")))

问题是由于
time
变量是一个字符向量:

R> class(df1$time)
[1] "character"
必须将其转换为类
POSIXlt
的对象,例如:

ggplot(df1, aes(x=strptime(time, "%H:%M"), y=Counts)) + geom_line()
或者,更简单的是,您可以直接使用
Date
变量,无需转换:

ggplot(df1, aes(x=Date, y=Counts)) + geom_line()

更好的是,您将看到
ggplot2
根据沿x轴的时间跨度自动标记x轴

编辑:如果要定义x轴限制,可以执行以下操作:

ggplot(df1, aes(x=Date, y=Counts)) + geom_line() + scale_x_datetime(limits=c(as.POSIXct("2012/12/07 04:00:00"),as.POSIXct("2012/12/07 10:00:00")))

非常感谢朱巴。只是另一个简单的问题。既然我有时间,那么重新定义x轴的最佳方式是什么(我想从04:00到10:00)。我想我应该使用:xlim=c(xmin,xmax)),但我正在努力让它发挥作用…@KT_1我编辑了我的答案以添加一种方法来实现这一点,但肯定有更简单的方法。非常感谢@juba。我仍在努力让代码与我的真实数据一起工作。我已经编辑了我的原始问题,以显示我的额外数据。任何帮助都将不胜感激。@KT_1我想最好再问一个问题。非常感谢@Juba。只是另一个简单的问题。既然我有时间,那么重新定义x轴的最佳方式是什么(我想从04:00到10:00)。我想我应该使用:xlim=c(xmin,xmax)),但我正在努力让它发挥作用…@KT_1我编辑了我的答案以添加一种方法来实现这一点,但肯定有更简单的方法。非常感谢@juba。我仍在努力让代码与我的真实数据一起工作。我已经编辑了我的原始问题,以显示我的额外数据。任何帮助都将不胜感激。@KT_1我想最好再问一个问题。