我正在运行一个R脚本,使用plot
和一些数据as.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次以添加每一行之后)
我遇到的问题是,grid
添加的指南与plot
添加的默认刻度线不对齐。默认情况下,绘图功能每10年添加一次,这就是我想要的。查看axTicks(1)
会给我0 5000 10000 15000
,这是1970年1月1日以后的天数单位的指南位置。
有没有办法找出已添加的标记的位置?更重要的是,有没有办法设定指南以匹配这些位置?
我意识到,对于这个例子,刻度是[0, 365.25*10, 365.25*20 etc.]
但是解决一般情况的答案会很好。
由于
JP
修改
这是一个可重现的例子来准确显示我的意思。
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)
文件test.csv看起来像这样(实际数据的提取)
bore Date dbns
42230210A 20/01/2009 13.13
42230210A 8/05/2009 13.21
42230210A 18/06/2009 13.19
42230210A 3/08/2009 13.2
42230210A 2/09/2009 13.25
42230210A 1/10/2009 13.3
42230210A 3/12/2009 13.32
42230210A 24/02/2010 13.3
42230210A 18/05/2010 13.3
42230210A 25/04/2012 11.45
42230210A 27/09/1966 11.18
42230210A 28/10/1969 11.14
42230210A 6/01/1970 11.03
42230210A 5/06/1973 10.68
42230210A 28/08/1973 10.63
42230210A 2/10/1973 10.73
42230210A 4/12/1973 10.7
42230210A 20/02/1980 11.39
42230210A 29/04/1980 11.45
42230210A 27/08/1980 11.45
42230210A 22/06/1988 11.14
42230210A 27/02/1996 11.78
42230210A 6/08/1996 11.68
42230210A 8/02/2000 11.64
42230210A 8/06/2000 11.71
42230210A 7/09/2000 11.75
42230210A 15/07/2008 13.01
其输出如下。指南偏离刻度线?
答案 0 :(得分:3)
因此检查?grid
表明正在发生的是它是根据“默认”刻度标记位置放置网格线,但是由于您绘制了日期对象,因此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)
答案 1 :(得分:3)
有一个函数Axis.Date
可以为Date
对象的轴创建适当的漂亮轴刻度位置。这不会更改par('xaxp')
,grid
用于查找刻度线的位置。
我们可以通过手动创建轴(并保存值)来解决这个问题
# 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)
答案 2 :(得分:0)
您的问题的答案如下:
是否有办法找出已添加的刻度线的位置?
在调用plot
之后,请使用函数axis.Date
x_ticks <- axis.Date(1, data$Date, labels = FALSE)
变量x_ticks
包含x轴上使用的刻度线的位置(在函数的第一个参数中由1标识)。
更重要的是,有没有办法设置准则以匹配这些位置?
grid(NA, NULL, lwd=3)
x_ticks <- axis.Date(1, data$Date, labels = FALSE)
abline(v = x_ticks, lty = 3, col ="lightgray", lwd = 3)
在grid
函数(nx = NA
)的第一个参数中使用NA的情况下,可以避免将垂直辅助线打印在错误的位置。第二个给您刻度线的位置。最后,第三部分将指南打印在正确的位置。