Неправильные x-метки на гистограмме R значений меток времени POSIXct - PullRequest
1 голос
/ 19 мая 2019

С учетом четырех временных меток, одной в апреле, двух в мае и одной в июне, функция hist с перерывами month показывает четыре метки: март, апрель, май и июль.

library(anytime)

dts <- anytime(c(
  "2019-04-15 12:00:00",
  "2019-05-15 12:00:00",
  "2019-05-15 12:00:00",
  "2019-06-15 12:00:00"
))

hist(dts, breaks = "month", format = "%B", freq = TRUE,
     col = c("turquoise", "steelblue"),
     xlab = "month", ylab = "count")

histogram image

Этот результат является по меньшей мере неожиданным.

Оказывается, что разрывы гистограммы были рассчитаны как 2019-03-30 23:00:00 CET, 2019-04-30 00:00:00 CEST, 2019-05-31 00:00:00 CEST, 2019-07-01 00:00:00 CEST (в местном часовом поясе).

Вместо этого должно было быть 2019-04-01 00:00:00 CEST, 2019-05-01 00:00:00 CEST, 2019-06-01 00:00:00 CEST, 2019-07-01 00:00:00 CEST

Есть ли способ получить ожидаемый результат (метки апрель, май, июнь и июль) без вычисления разрывов и текстов меток "порука "?

1 Ответ

1 голос
/ 20 мая 2019

Поскольку я не могу понять, почему графический вывод отображается так, как указано выше, и спрашивающий, похоже, не понимает мои комментарии, которые пытаются прояснить проблему с часовым поясом, я вставлю то, что вижу, с помощью его кода (в тихоокеанском часовом поясе США):

enter image description here

Возможно, это может послужить основой для дальнейшего обсуждения проблемы. Код, который делает это, находится в hist.POSIXt, и, как я читаю, это должен быть раздел, который гласит:

 if (valid == 6L) {
                start$mday <- 1L
                end <- as.POSIXlt(max(x, na.rm = TRUE))
                end <- as.POSIXlt(end + (31 * 86400))
                end$mday <- 1L
                end$isdst <- -1L
                breaks <- seq(start, end, "months")
                ind <- seq_along(breaks[-1L])
                if (right) 
                  breaks[ind] <- breaks[ind] - 86400
                if (missing(format)) 
                  format <- "%Y-%m-%d"
            }

Так что, возможно, вызов должен быть изменен, чтобы установить для параметра right значение FALSE?

 png(); hist(dts, breaks = "month", freq = TRUE,
      col = c("turquoise", "steelblue"),
      xlab = "month", ylab = "count", right=FALSE) ; dev.off()

enter image description here

Все еще не могу понять, почему вы получаете форматирование "только на месяц". Поскольку hist является общим, всегда есть вероятность, что вы загрузили пакет, который имеет другую версию. Там должно было быть предупреждение о маскировке.

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