我有以下数据:
x=strptime(20010101:20010110)
y=1:10
z=data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)
所以我的数据是这样的:
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
Run Code Online (Sandbox Code Playgroud)
当我使用以下基础创建基础图:
plot(x,y)
grid(NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
我的垂直网格与日期刻度标记不对齐.我知道这似乎是一个非常简单的问题,但我还没有找到解决方案.有没有办法让垂直网格与使用不需要我这样做的基数的日期刻度线对齐:
abline(v=as.numeric(strptime(c(20010102,20010104,20010106,20010108,20010110),'%Y%m%d')))
Run Code Online (Sandbox Code Playgroud)
我有很多不同日期的情节,我真的希望尽可能自动化,希望使用基数.
该函数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")
Run Code Online (Sandbox Code Playgroud)

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"))
Run Code Online (Sandbox Code Playgroud)
我建议创建您自己的函数,该函数将添加水平和垂直网格。
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()
Run Code Online (Sandbox Code Playgroud)