沿着日期刻度线放置网格

时间:2012-02-02 20:16:20

标签: r strptime

我有以下数据:

x=strptime(20010101:20010110)
y=1:10
z=data.frame(x,y)

所以我的数据是这样的:

            x  y
1  2001-01-01  1
2  2001-01-02  2
3  2001-01-03  3
4  2001-01-04  4
5  2001-01-05  5
6  2001-01-06  6
7  2001-01-07  7
8  2001-01-08  8
9  2001-01-09  9
10 2001-01-10 10

当我使用以下方式在基础中创建绘图时:

plot(x,y)
grid(NULL,NULL)

我的垂直网格与日期刻度标记不对齐。我知道这似乎是一个非常简单的问题,但我还没有找到解决方案。有没有办法让垂直网格与使用不需要我这样做的基数的日期刻度线对齐:

abline(v=as.numeric(strptime(c(20010102,20010104,20010106,20010108,20010110),'%Y%m%d')))

我有很多不同日期的情节,我真的希望尽可能自动化,希望使用基数。

4 个答案:

答案 0 :(得分:6)

函数axis绘制轴,刻度线和标签,并将刻度线位置作为向量返回。

由于您拥有Date数据,因此需要使用axis.Date执行此操作,然后使用abline绘制网格:

z=data.frame(
  x=seq(as.Date("2001-01-01"), by="+1 month", length.out=10)
  y=1:10
)
plot(y~x, data=z)
abline(v=axis.Date(1, z$x), col="grey80")

enter image description here

答案 1 :(得分:3)

正如?grid帮助文件所说,“如果需要更多微调,[您可以]直接使用abline(h = ., v = .)”。这是一个更多的工作,但并不多,如果你想经常使用它,它将很容易包含在一个函数中。

这是一种方法:

plot(x,y)
abline(v = pretty(extendrange(z$x)), 
       h = pretty(extendrange(z$y)),
       col = 'lightgrey', lty = "dotted")
points(x,y, pch=16)

enter image description here

答案 2 :(得分:3)

abline可以从您的POSIXlt载体中提取日期标记(通过strptime)。

x=strptime(20010101:20010110,format="%Y%m%d")
y=1:10

plot(x,y)
grid(nx=NA, ny=NULL)
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = par("lwd"))

我建议您创建自己的函数,添加水平和垂直网格。

my.grid <-function(){
grid(nx=NA, ny=NULL)
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd =
par("lwd"))
}

plot(x,y)
my.grid()

答案 3 :(得分:1)

我不熟悉基础图的复杂性。但是,ggplot可以有效地做到这一点。

x <- strptime(20010101:20010110, format='%Y%m%d')
y <- 1:10
z <- data.frame(x, y)
qplot(x,y,data=z,'point')