R Plot 指定时间刻度线的数量 - 时间/日期相当于漂亮

标签 r plot

我想知道在 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() 将我们移至下一小时),
  • 递增 以 1 小时 ( 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)
    

    结果图如下所示:

    enter image description here

    为了显示更精细的控制,我现在在每个半小时位置添加次要刻度线,但抑制这些刻度线的注释(通过 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)
    

    情节现在看起来像这样:

    enter image description here

    您可以添加自己的标签,而不是 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)
    

    结果图如下所示:

    enter image description here
    format()返回格式化日期时间的字符串。您可以paste()在您想要的任何其他内容上或查看可用于格式化 ?strftime 中的日期时间对象的其他占位符

    关于R Plot 指定时间刻度线的数量 - 时间/日期相当于漂亮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592627/

    相关文章:

    r - 并行处理时出错: port cannot be open

    python - 如何在Python中生成彼此相邻的词云

    python - 如何在单个子图中绘制数字列表?

    python - 长时间运行的决策树模型

    r - 如何在 fiddle 图上显示 mustache 和点?

    R,如何在使用箭头 :open_dataset internally 的函数中将变量名称引用为字符串

    python - 从 seaborn 中保存情节

    r - 将 glm 的预测线添加到 ggplot2,大于原始数据集

    r - 泊松回归的预测

    python - 是否可以减少 matplotlib 图中的标记数量?