R x轴日期标签只有一个值

时间:2011-02-26 17:05:31

标签: r graph plot

我在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

结果图如下所示: enter image description here

我真的只想要更好的标签。我并不太关心它们究竟是什么,而是关注月+日,以及其中至少3个。

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

enter image description here

答案 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)

产生: enter image description here

还有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"