我想知道在 x 轴上绘制时间时如何绘制更多刻度线。
基本上,相当于漂亮的时间。很明显,它与时间的关系不太好,因为它使用了 1、2、5 和 10 的因子。对于时间,人们可能想要例如小时,半小时,...
plot(as.POSIXct(x,origin="1960-01-01"),y,type="l",xlab="Time")
给出的记号实在太少且间距太宽。
zoox<-zoo(y,as.POSIXct(stats$Time,origin="1960-01-01"))
plot(zoox)
给出相同的。
谢谢
编辑:
只是为了澄清(到目前为止的答案并没有解决我的问题):我正在寻找的是一个类似漂亮日期的功能,例如一个函数,它接受开始日期、结束日期、刻度数,并输出刻度的位置。也就是说,我很清楚可以绘制小时,绘制分钟,以及其他什么,但是相当自动化数字的刻度距离,并且日期的结果函数应该自行决定是否使用天,小时,分钟,秒、毫秒、微秒、30 分钟、500 微秒、5 秒等间隔。无论如何,这就是漂亮对数字的作用。
编辑2:
这是我目前用来决定时间轴格式的函数(请注意,这不适用于日期):
mydiff <- end-start
if(mydiff>1800) {
axis.POSIXct(1,xrange,format="%H:%M")
} else if(mydiff>30) {
axis.POSIXct(1,xrange,format="%H:%M:%S")
} else if(mydiff>0.5) {
axis.POSIXct(1,xrange,format="%H:%M:%OS3")
} else
axis.POSIXct(1,xrange,format="%H:%M:%OS6")
}
我没有增加刻度线的功能,所以我使用默认的刻度线数量
最佳答案
使用可重现的示例
set.seed(1)
x <- as.POSIXct(sort(sample(100000, 100)), origin="1960-01-01")
y <- rpois(100, 5)
plot(x, y, type = "l", xlab = "Time")
我们可以使用
axis.POSIXct()
函数(也可以使用 Axis()
S3 泛型)将自定义轴添加到绘图中。这里的要点是,作为用户,您可以完全控制刻度线的绘制位置以及它们的标记方式,如果默认设置不适合您,您只需要更加努力地工作。首先我们绘制数据但禁止绘制 x 轴:
plot(x, y, type = "l", xlab = "Time", xaxt = "n")
接下来,我将在每个小时的开始添加一个主要刻度线。为此,我创建了一系列日期时间
ceiling()
将我们移至下一小时),by = "1 hour"
) 为单位的序列。 此序列提供给
at
axis.POSIXct()
的论点.如果不阅读,其余部分应该很容易理解?axis.POSIXct
和 ?par
## add axis tick at each hour:
axis.POSIXct(side = 1, x = x,
at = seq(from = round(x[1], "hours"),
to = x[1] + ceiling(difftime(tail(x, 1), head(x, 1),
units = "hours")),
by = "1 hour"),
las = 2)
结果图如下所示:
为了显示更精细的控制,我现在在每个半小时位置添加次要刻度线,但抑制这些刻度线的注释(通过
labels
参数)并缩短次要刻度线(通过图形参数 tcl
)。注意 seq()
方法by
参数可以采用指定间隔的数字量## add minor ticks at 30 min intervals to above plot
axis.POSIXct(side = 1, x = x,
at = seq(from = round(x[1], "hours"),
to = x[1] + ceiling(difftime(tail(x, 1), head(x, 1),
units = "hours")),
by = "30 mins"),
las = 2, tcl = -0.2, labels = FALSE)
情节现在看起来像这样:
您可以添加自己的标签,而不是
axis.POSIXct
的标签。功能来了。如果你想这样做,那么我们应该分配 seq()
的输出。到一个对象,然后我们可以使用 format()
功能上。例如:plot(x, y, type = "l", xlab = "Time", xaxt = "n")
tseq <- seq(from = round(x[1], "hours"),
to = x[1] + ceiling(difftime(tail(x, 1), head(x, 1),
units = "hours")),
by = "1 hour")
axis.POSIXct(side = 1, x = x, at = tseq,
labels = format(tseq, format = "%H:%M"), las = 2)
结果图如下所示:
format()
返回格式化日期时间的字符串。您可以paste()
在您想要的任何其他内容上或查看可用于格式化 ?strftime
中的日期时间对象的其他占位符
关于R Plot 指定时间刻度线的数量 - 时间/日期相当于漂亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592627/