使用ggplot2 qplot函数绘制时间序列

时间:2014-09-10 23:14:02

标签: r time ggplot2

我需要有一个24小时的情节和时间序列,间隔为5分钟。我使用了qplot函数。

我得到的变量是这样的:

intervals <- seq(ISOdatetime(2001,2,3,0,0,0), 
                      ISOdatetime(2001,2,4,0,0,0), by=(60*5))

intervals <- intervals[1:length(intervals)-1]
intervals <- strftime(intervals, format="%H:%M:%S")

我用的最后一行只是为了有时间。

当我绘制它时,它看起来像这样:

enter image description here

我想要的是让时间显示在x轴上,而不是我所拥有的。你能帮帮我吗?

谢谢

感谢Paulo,我确实设法使用:

来获得严谨的情节

ggplot(act_weekdays, aes(x=interval, y=steps)) + geom_point() + facet_grid(.~day) + scale_x_datetime(breaks = pretty_breaks(), minor_breaks = date_breaks("2 hour"), labels = date_format("%H:%M")) + theme(axis.text.x = element_text(angle = 90)) + xlab("Interval") + ylab("Number of steps")

给我这张图:

http://s25.postimg.org/828ypjkqn/Rplot01.png

2 个答案:

答案 0 :(得分:0)

像这样的东西

intervals <- seq(ISOdatetime(2001,2,3,0,0,0), 
                 ISOdatetime(2001,2,4,0,0,0), by=(60*5))

intervals <- intervals[1:length(intervals)-1]
d <- data.frame(steps=rep(rnorm(288, 100, 6), 2),
                int = rep(intervals, 2),
                period = rep(c('weekday', 'weekend'), each = 144, times = 2))
library(ggplot2)
library(scales)
ggplot(d, aes(x=int, y=steps)) +
  geom_point() +
  facet_grid(.~period) +
  scale_x_datetime(breaks = pretty_breaks(),
                   minor_breaks = date_breaks("2 hour"))+
  theme(axis.text.x = element_text(angle = 90))

ggplot

ggplot(d, aes(x=int, y=steps)) +
  geom_point() +
  facet_grid(.~period) +
  scale_x_datetime(breaks = pretty_breaks(),
                   minor_breaks = date_breaks("2 hour"),
                   labels = date_format("%H:%M")) +
  theme(axis.text.x = element_text(angle = 90))

hour:minutes

上面的代码适用于我提供的数据和系统规范

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Portuguese_Portugal.1252  LC_CTYPE=Portuguese_Portugal.1252   
[3] LC_MONETARY=Portuguese_Portugal.1252 LC_NUMERIC=C                        
[5] LC_TIME=Portuguese_Portugal.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] scales_0.2.4  ggplot2_1.0.0

loaded via a namespace (and not attached):
 [1] colorspace_1.2-4 digest_0.6.4     grid_3.1.0       gtable_0.1.2     labeling_0.2    
 [6] MASS_7.3-33      munsell_0.4.2    plyr_1.8.1       proto_0.3-10     Rcpp_0.11.2     
[11] reshape2_1.4     stringr_0.6.2    tools_3.1.0 

RStudio版本0.98.932

答案 1 :(得分:0)

尼斯。我使用scales_x_continuous解决了类似的问题。下面的链接解释了为什么这是一种更合适的方式,使用chron包,即在混合来自几天的时间相关数据时,您不需要在间隔中包含任意年,月和日:http://ggplot2.tumblr.com/

以下是使用交通数据的示例:km / h和一天中的时间。我从一个speadsheet导入了数据。时间数据变成一个字符串,例如7:12:07,我改为适当的时间数据:t2 $ time&lt; - times(t2 $ time)。

tp<-ggplot(t2)+ aes(x=time,y=speed) + geom_point(size=2) 
tp <- tp  + xlab('time') + ylab('km/h') + ggtitle('Speed and time')
tp <- tp + scale_x_continuous(breaks=pretty_breaks()(range(t2$time)),minor_breaks = times(c(1:23)/24))
tp + scale_y_continuous(breaks=c(1:10)*10)