2011-12-15 94 views
5

我显示的时间序列数据为ggplot2,但标记标签显示一些奇怪的行为。可能我做错了什么,但我在互联网上找不到任何帮助。这里有一个例子:ggplot2中的日期标记显示错误的标签

#just sample data 
time <- as.Date(seq(as.Date("2004/1/1"), as.Date("2009/12/1"), by = "1 month")) 
data <- rnorm(nrow(test))+c(1:nrow(test)) 
test <- data.frame(time, data) 

我与情节:

q1 <- ggplot(data=test) + geom_line(aes(x=time, y=data)) 
q1 <- q1 + scale_x_date(major="years", minor="3 months", format="%Y-%m", lim=c(as.Date("2004/1/1"),as.Date("2009/12/1")), name="") 
q1 

这将产生以下图表: example graph

但是从我的理解电网应该结束了2009年12月1日 - 对吗?非常感谢你的帮助!

+0

什么问题?该行确实结束2009年12月 – hadley 2011-12-16 12:40:49

+0

哈德利是你完全正确 - 我的意思是*网格*和bdemarest是完全正确的,他的答案 - 我只是没有意识到。对不起 – Seb 2011-12-16 13:05:08

回答

8

limits参数为scale_x_date会影响绘制哪些数据点,但不会直接更改轴刻度标签或轴范围。这种行为是在帮助页面http://had.co.nz/ggplot2/scale_date.html很好的说明(实现页面的底部。)

如果你想消除空白区域向左和数据的权利,使用coord_cartesian

library(ggplot2) 

x <- as.Date(seq(as.Date("2004/1/1"), as.Date("2009/12/1"), by = "1 month")) 
y <- rnorm(length(x))+c(1:length(x)) 
test <- data.frame(time=x, data=y) 

q2 <- ggplot(data=test) + 
     geom_line(aes(x=time, y=data)) + 
     scale_x_date(major="years", minor="3 months", format="%Y-%m", name="") + 
     coord_cartesian(xlim=c(as.Date("2004/1/1"),as.Date("2009/12/1"))) 

png("date_ticks_plot.png", height=600, width=600) 
print(q2) 
dev.off() 

enter image description here

2

您的线路确实在2009/12/1结束,但可能您使用的是旧版本的ggplot,而upgrading可能会帮助x轴标签。