R:打印日期时查找记号标记的位置

R:打印日期时查找记号标记的位置,r,datetime,plot,R,Datetime,Plot,我正在运行一个R脚本,它使用plot和一些作为.Date获取的数据随时间绘制数据。然后,我使用grid添加如下指南: plot(as.Date(data[["Date"]]), -data[["dbns"]], lwd=1, col = colours[i], type="l",ylim=ylimit, xlim=xlimit, xlab="", ylab =ylabel) grid(NULL,NULL,lwd=1) 下面是一个这样的例子(实际上,这个例子是在这个图循环3次以添加每一行之后)

我正在运行一个R脚本,它使用
plot
和一些
作为.Date
获取的数据随时间绘制数据。然后,我使用
grid
添加如下指南:

plot(as.Date(data[["Date"]]), -data[["dbns"]], lwd=1, col = colours[i], type="l",ylim=ylimit, xlim=xlimit, xlab="", ylab =ylabel)

grid(NULL,NULL,lwd=1)
下面是一个这样的例子(实际上,这个例子是在这个图循环3次以添加每一行之后)

我遇到的问题是,添加了
网格
的指南与
绘图
添加的默认记号不一致。默认情况下,plot函数每10年添加一次勾号,这就是我想要的。查看
axTicks(1)
可以得到
0 5000 10000 15000
,这是1970年1月1日之后以天为单位的指南位置

有没有办法找出已添加记号的位置?更重要的是,有没有办法制定与这些地点相匹配的指导方针

我意识到,对于这个例子,刻度是
[0,365.25*10,365.25*20等]
但是一个解决一般情况的答案会更好

谢谢

太平绅士

编辑:

这里有一个可复制的例子来确切地说明我的意思

data <- read.csv("test.csv"), header =TRUE)
data[["Date"]] <- as.Date(data[["Date"]], format = "%d/%m/%Y")

data<-data[order(as.Date(data$Date)),]


plot(as.Date(data[["Date"]]), -data[["dbns"]], type="l", xlim=xlimit)
grid(NULL,NULL,lwd=3)
其输出如下。这些指导方针是否偏离了刻度线


因此,检查
?网格
表明,它是基于“默认”记号位置放置网格线,但由于您绘制了一个日期对象,R没有使用“默认”(即将日期视为数字变量)来放置记号

文档进一步指出,如果需要更精细的控制,则应使用
abline
直接放置它们

所以你可能想这样做:

plot(as.Date(data[["Date"]]), -data[["dbns"]], type="l")
grid(NA,NULL,lwd=3)
v <- as.numeric(as.Date(paste0(c(1970,1980,1990,2000,2010),'-01-01')))
abline(v = v,lty = "dotted",col = "lightgray",lwd = 3)
绘图(如.Date(数据[[“Date”]]),-data[[“dbns”]],type=“l”)
网格(不适用,空,lwd=3)

v有一个函数
Axis.Date
,它为
Date
对象的轴创建合适的漂亮轴刻度位置。这不会改变
par('xaxp')
,而
grid
使用par来查找记号的位置

我们可以通过手动创建轴(并保存值)来解决问题

#假设您的数据名为DD

DD$Date您的问题的答案如下:

有没有办法找出已添加记号的位置

绘图
函数调用之后,使用函数
axis.Date

x_ticks <- axis.Date(1, data$Date, labels = FALSE)
使用
网格
函数(
nx=NA
)的第一个参数中的NA,可以避免在错误的位置打印垂直指南。第二个为您提供记号的位置。最后,第三个将在正确的位置打印指南

这样,你得到的情节看起来,我猜,就像你所期望的那样

A将不胜感激!Hi Ben,添加了一些示例代码和一些数据。希望这更清楚一点,abline(v=pretty(data$Date),lty=3,col=“lightgray”)
可以自动化一点。谢谢joran,这肯定解决了我的第一个问题。我遇到的第二个问题是,这只是使用此脚本生成的大约50个图形中的一个。并不是所有人都有10年的时间间隔,也不是所有人都有相同的时间跨度。所以我在寻找一种方法来提取蜱虫的位置,然后放入一个ablineBingo!多谢各位much@joran--我非常乐意把我的答案和你的答案结合起来(使用
Axis
创建
Date
轴并保存记号位置。@如果您愿意,可以使用mnel。谢谢mnel,这对我来说也很有效,但我不得不删除第一行。您能解释一下为什么使用'as.character'而不是'as.Date'吗?@jprockbelly——当我读取数据时,强制
Date
--因此,我强制使用字符,以便.Date能起作用
# assuming your data is called DD
DD$Date <- as.Date(as.character(DD$Date), format = '%d/%m/%Y')
# don't plot the x axis (xaxt = 'n')
plot(-dbns~Date,data = DD[order(DD$Date),], type="l", xaxt = 'n')
# create the axis and  save the tick locations
at <- as.numeric(Axis(side = 1, x = DD$Date))
grid(NA,NULL,lwd=3)
abline(v = at,lty = "dotted",col = "lightgray",lwd = 3)
x_ticks <- axis.Date(1, data$Date, labels = FALSE)
grid(NA, NULL, lwd=3)
x_ticks <- axis.Date(1, data$Date, labels = FALSE)
abline(v = x_ticks, lty = 3, col ="lightgray", lwd = 3)