ggplot2绘图函数和strptime(as.character())

时间:2013-01-27 23:52:58

标签: r datetime ggplot2

我有时间序列数据,我想用这段代码绘制它:

temp  <- read.csv("C:/Thesis/Data_set/grosseroor/25.csv",
                        header = FALSE)

names(temp) <- c("dt","ambtemp")
require(ggplot2)
library(scales)
temp$dt <-strptime(as.character(temp$dt), format = "%Y/%m/%d %H:%M")
ggplot(temp, aes(dt, ambtemp)) + geom_line() +
  scale_x_datetime(breaks = date_breaks("5 hour"),labels=date_format("%H:%M")) +
  xlab("Time 00.00 ~ 24:00 (2007-09-29)") + ylab("Tempreture")

示例数据:

date_time                
    10/20/2007 4:52 -6.14
    10/20/2007 4:54 -6.17
    10/20/2007 4:56 -6.09
    10/20/2007 5:00 -7.2
    10/20/2007 5:02 -6.65
    10/20/2007 5:04 -6.04
    10/20/2007 5:16 -6.26
    10/20/2007 5:20 -6.52
    10/20/2007 5:22 -6.4
    10/20/2007 5:24 -6.92
    10/20/2007 5:26 -7.04
    10/20/2007 5:28 -6.84
    10/20/2007 5:30 -6.16
    10/20/2007 5:32 -7.13
    10/20/2007 5:34 -7.43
    10/20/2007 5:36 -6.84
    10/20/2007 5:38 -7.82
    10/20/2007 5:40 -6.84
    10/20/2007 5:42 -6.84
    10/20/2007 5:44 -7.46
    10/20/2007 5:46 -7.74
    10/20/2007 5:48 -8.04

但当我跑线temp$dt <-strptime((temp$dt), format = "%Y/%m/%d %H:%M")时, 所有日期时间列都更改为NA

1 个答案:

答案 0 :(得分:1)

问题是由format中的错误strptime字符串引起的。您指定了%m/%d/%Y,但数据的格式不同:月/日/年。因此,您必须将命令更改为:

temp$dt <-strptime(as.character(temp$dt), format = "%m/%d/%Y %H:%M")

正如您将看到的那样,日期元素的顺序会自动显示为年 - 月 - 日:2007-10-20

ambtemp还有另一个问题。正如你在评论中看到的那样,这是一个因素。我认为它应该是数字。您可以使用以下命令对其进行转换:

temp$ambtemp <- as.numeric(as.character(temp$ambtemp ))

现在,您可以绘制数据(我没有更改以下命令):

require(ggplot2)
library(scales)

ggplot(temp, aes(dt, ambtemp)) + geom_line() +
  scale_x_datetime(breaks = date_breaks("5 hour"),labels=date_format("%H:%M")) + 
  xlab("Time 00.00 ~ 24:00 (2007-09-29)") + 
  ylab("Tempreture")

enter image description here