R 使用ggplot2打印时间序列时出错消息
我对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","
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我想最好再问一个问题。