plot (x, y) со значением strptime не работает с единственной точкой данных - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь построить график рассеяния в блестящем, используя время суток по оси 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 есть только одна точка данных, шкала времени графика на оси y больше не соответствует времени, и точка данных появляется в середине графика.

sample plot 2

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 01 июня 2019

То, что вы видите, это то, что 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

Итак, мы исправим этоуказав 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))

one point, corrected axes

Вам нужно только указать ylim, чтобы ответить на этот вопрос, но без настройки xlim= здесь, предыдущая ось х охватывала 6-14, не годится для месяцев.Также следует отметить, что мне пришлось привести ylim к числовому значению для графика, он не работал с ylim в чистом виде POSIXt ... не знаю точно, почему это так, но это не такотвлекать от полезности участка в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...