我正在尝试使用y轴上的时间绘制散点图,使其具有光泽。 绘制多个点时,y轴看起来很棒。
代码如下:
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轴上的时间比例就不再是时间关系,并且该数据点会出现在图形的中间。
感谢您的帮助!
答案 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)
但单点不:
sub <- coords[1,]
month <- sub$month
time <- strptime(sub$format_time, format = "%l:%M:%S %p")
plot(month, time)
因此,我们通过指定xlim
和ylim
参数来修复它。在这种情况下,由于我推断这是一年(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))
您只需要指定ylim
即可回答此问题,但无需在此处设置xlim=
,先前的x轴跨度为6-14,连续数月无效。还要注意的是,我不得不将ylim
强制转换为数字,但它不能以纯ylim
的形式与POSIXt
一起使用...不确定确切的原因,但这一般不会影响绘图的实用性。