Я пытаюсь нанести некоторые метки времени с помощью ggplot2 и R. Вот минимальный и воспроизводимый пример моей текущей работы
library(lubridate)
library(ggplot2)
sample_size <- 100
start_date = as.POSIXct("2020-01-01 00:00")
end_date = as.POSIXct("2020-01-02 00:00")
timestamps <- as.POSIXct(sample(seq(start_date, end_date, by=60), sample_size))
amount <- rpois(sample_size, 5)
df <- data.frame(timestamps=timestamps, amount=amount)
df$hour_group <- floor_date(df$timestamps, unit="1 hour")
ggplot(df, aes(x=hour_group, y=amount)) + geom_col()
Объяснение: Сначала создается образец кадра данных со столбцом отметка времени и сумма . Временные метки равномерно выбираются между start_date
и end_date
. Я хотел бы построить переменную amount
для каждого часа дня. Поэтому создается другой столбец hour_group
, в котором указывается час каждой отметки времени.
При построении этих данных получается следующий график:
Столбцы выглядят хорошо, но, например, первый столбец представляет сумму из amount
с отметками времени между 00:00
и 01:00
Я бы хотел, чтобы столбец заполнял именно это пространство (не 23:30
до 00:30
, как на текущем графике). Поэтому я хочу, чтобы выровнять левую границу каждого столбца с точкой привязки (в примере 00:00
), а не центрировать столбец в этой точке. Как этого достичь?
Мой подход: Один из способов, которым я могу думать, - это создать еще один столбец со смещенными опорными точками. В примере требуется 30-минутная смена.
df$hour_group_shifted <- df$hour_group + 60*30
Новый график создает ожидаемый результат
Мне все еще интересно, есть ли может быть проще сделать это напрямую с помощью настройки ggplot без дополнительного столбца.