我在R中创建了一个以日期为x轴的情节。我的框架有日期,没问题。我正在使用自定义日期范围 - 通过使用固定启动来截断一些最早的数据,并通过使用由其他代码确定的结尾略微延伸超过最新数据。现在的范围是~47天。这一切都很好。
我的问题是xaxis标签只包含一个标签“Feb”,但我想包含至少3个标签,如果不是5个。
starttime <- strptime("20110110", "%Y%m%d")
endtime <- strptime("20110226 1202", "%Y%m%d %H%M") #This is actually determined programmatically, but that's not important
xrange <- c(starttime, endtime)
yrange <- c(0, 100)
par(mar=par()$mar+c(0,0,0,7),bty="l")
plot(xrange, yrange, type="n", xlab="Submission Time", ylab="Best Score", main="Top Scores for each team over time")
#More code to loop and add a bunch of lines(), but it's not really relevant
结果图如下所示:
我真的只想要更好的标签。我并不太关心它们究竟是什么,而是关注月+日,以及其中至少3个。
答案 0 :(得分:3)
试试这个。我稍微更改了plot()语句并添加了两行。
starttime <- strptime("20110110", "%Y%m%d")
endtime <- strptime("20110226 1202", "%Y%m%d %H%M")
#This is actually determined programmatically, but that's not important
xrange <- c(starttime, endtime)
yrange <- c(0, 100)
par(mar=par()$mar+c(0,0,0,7),bty="l")
#I added xaxt="n" to supress the plotting of the x-axis
plot(xrange, yrange, type="n", xaxt="n", xlab="Submission Time", ylab="Best Score", main="Top Scores for each team over time")
#I added the following two lines to plot the x-axis with a label every 7 days
atx <- seq(starttime, endtime, by=7*24*60*60)
axis(1, at=atx, labels=format(atx, "%b\n%d"), padj=0.5)
#More code to loop and add a bunch of lines(), but it's not really relevant
答案 1 :(得分:3)
此外,请查看axis.Date()
,不 S3通用,但可以帮助您设置所需的额外标签。我为这个函数编写了一个补丁,它在几个R版本之前就已合并,它允许没有标签的轴。以下是?axis.Date
:
random.dates <- as.Date("2001/1/1") + 70*sort(stats::runif(100))
plot(random.dates, 1:100)
# or for a better axis labelling
plot(random.dates, 1:100, xaxt="n")
axis.Date(1, at=seq(as.Date("2001/1/1"), max(random.dates)+6, "weeks"))
axis.Date(1, at=seq(as.Date("2001/1/1"), max(random.dates)+6, "days"),
labels = FALSE, tcl = -0.2)
产生:
还有Axis.Date()
是S3泛型,因此可以通过Axis(dates.vec, ....)
调用,其中dates.vec
是日期的x轴向量。也可以指定at
等。
答案 2 :(得分:2)
如果您在调用plot()
时禁止使用x轴注释,然后使用axis()
手动指定的点和标签,则可以手动执行此操作:
axis(1,at=axis.pos[axis.ind],labels=axis.txt[axis.ind])
使用一组索引axis.ind
,从x值和格式化标签中选择。你可以使用strftime()
几乎任何东西,例如'%d %b'
应该产生白天和人类可读的短月,如
R> strftime(Sys.Date(), "%d %b")
[1] "26 Feb"