6

我有以下数据:

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')))

我有很多不同日期的情节,我真的很想尽可能地自动化这个,希望使用 base.

4

4 回答 4

7

该函数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")

在此处输入图像描述

于 2012-02-02T21:22:46.967 回答
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)

在此处输入图像描述

于 2012-02-02T21:24:43.797 回答
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()
于 2012-02-02T21:39:53.800 回答
1

我不熟悉基本情节的复杂性。但是,ggplot 有效地做到了这一点。

x <- strptime(20010101:20010110, format='%Y%m%d')
y <- 1:10
z <- data.frame(x, y)
qplot(x,y,data=z,'point')
于 2012-02-02T20:52:41.583 回答