我正在跟进@Gavin Simpson对早期关于x轴刻度标记的问题的回答,并提出了一个关于非顺序刻度标签的问题。以下是他设置问题的响应示例:
set.seed(53)
f <- rnorm(700, 2)
dates <- seq(as.Date("04/01/2012", format = "%d/%m/%Y"),
by = "days", length = length(f))
head(f)
op <- par(mar = c(7,4,4,2) + 0.1) ## more space for the labels
plot(dates, f, xaxt = "n", ann = FALSE)
labDates <- seq(as.Date("01/01/2012", format = "%d/%m/%Y"), tail(dates, 1),
by = "months")
axis.Date(side = 1, dates, at = labDates, format = "%b %y", las = 2)
title(ylab = "f") ## draw the axis labels
title(xlab = "dates", line = 5) ## push this one down a bit in larger margin
par(op) ## reset margin
然而,不是从“1月12日”开始到12月13日结束的x轴刻度标签的顺序集合,我想仅标记几个非连续且长度不同于f的日期,例如截至2012年3月3日,2012年4月27日,2012年10月20日和2013年5月8日,剩余的情节仍然存在。所以我设置了一个日期的向量来调用,但之后会被绊倒:
set.seed(53)
f <- rnorm(700, 2) # the count doesn't matter
MyDates<-c("03/03/12", "04/27/13","10/20/12", "05/08/13") # non-sequential char string of dates not equal to f
plot(MyDates, f, xaxt = "n", ann = FALSE)
axis.Date(1, MyDates, at=c(1,length(MyDates), ??????)) #not complete and not right
所以我的问题是如何标记一组长度与数据不同的非连续x轴刻度线?
我还想在我选择的日期添加垂直线,我知道可以使用abline()
添加,但是由于我正在解决这个axis.Date
问题,所以还没有到达那里
答案 0 :(得分:0)
首先,将您选择的日期从character
转换为Date
(使用正确的格式字符串):
MyDates <- as.Date(MyDates, format = "%m/%d/%y")
# [1] "2012-03-03" "2013-04-27" "2012-10-20" "2013-05-08"
class(MyDates)
# [1] "Date"
然后,您只能在这些点添加带刻度的轴:
axis.Date(side = 1, at = MyDates, format = "%b %y", las = 2)
那个短轴看起来很难看?添加第一个和最后一个日期:
axis.Date(side = 1, at = c(min(dates), MyDates, max(dates)), format = "%b %y", las = 2)
想要拉伸轴但没有第一个/最后一个标签?不要打印它们:
axis.Date(side = 1, at = c(min(dates), MyDates, max(dates)),
labels = c("", format(MyDates, "%b %y"), ""), las = 2)
或者,首先绘制一个没有标签的长轴:
axis.Date(side = 1, at = c(min(dates), max(dates)), labels=FALSE)
axis.Date(side = 1, at = MyDates, format = "%b %y", las = 2)
垂直线:
abline(v=MyDates)
abline(v=MyDates, lty="dashed", col="red")
# etc.