使用strptime的plot(x,y)不适用于单个数据点

时间:2019-05-31 19:19:57

标签: r plot time shiny

我正在尝试使用y轴上的时间绘制散点图,使其具有光泽。 绘制多个点时,y轴看起来很棒。

sample plot

代码如下:

     output$outputPlot <- renderPlot({
        coords <- subset(coords, location == input$cities)
        month <- coords$month
        time <- strptime(coords$format_time, format = "%l:%M:%S %p")
        plot(month, time)
      })

但是,当coords中只有1个数据点时,该图在y轴上的时间比例就不再是时间关系,并且该数据点会出现在图形的中间。

sample plot 2

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您看到的是R不知道如何为单个点猜测合适的范围。通常,它会将数据范围扩大4%(请查看?par并查找'xaxs'),但只有一点却毫无意义。

所以我们需要告诉它使用什么ylim。 (同样,您的x轴也需要一些指导。)

假数据:

set.seed(2)
coords <- data.frame(tm = Sys.time() + runif(20, -3e7, 3e7))
coords$month <- as.integer(format(coords$tm, format = "%m"))
coords$format_time <- format(coords$tm, format = "%l:%M:%S %p")
head(coords)
#                    tm month format_time
# 1 2018-10-24 20:15:17    10  8:15:17 PM
# 2 2019-10-19 05:07:04    10  5:07:04 AM
# 3 2019-07-21 14:19:22     7  2:19:22 PM
# 4 2018-10-13 03:44:57    10  3:44:57 AM
# 5 2020-04-03 21:32:22     4  9:32:22 PM
# 6 2020-04-03 15:27:59     4  3:27:59 PM

“正常”图看起来很好:

month <- coords$month
time <- strptime(coords$format_time, format = "%l:%M:%S %p")
plot(month, time)

many points, good y-axis

但单点不:

sub <- coords[1,]
month <- sub$month
time <- strptime(sub$format_time, format = "%l:%M:%S %p")
plot(month, time)

single point, wrong y-axis

因此,我们通过指定xlimylim参数来修复它。在这种情况下,由于我推断这是一年(x)和一天(y)的一天,因此我可以对其进行硬编码,但是在其他情况下,您可能只想减去/添加一个来自一个基准的少量数据:

sub <- coords[1,]
month <- sub$month
time <- strptime(sub$format_time, format = "%l:%M:%S %p")
xlim <- c(1, 12)
ylim <- strptime(c("12:00:00 AM", "11:59:59 PM"), format = "%l:%M:%S %p")
plot(month, time, xlim = xlim, ylim = as.numeric(ylim))

one point, corrected axes

您只需要指定ylim即可回答此问题,但无需在此处设置xlim=,先前的x轴跨度为6-14,连续数月无效。还要注意的是,我不得不将ylim强制转换为数字,但它不能以纯ylim的形式与POSIXt一起使用...不确定确切的原因,但这一般不会影响绘图的实用性。