Отображение данных за день года в ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

У меня возникли некоторые проблемы с получением оси X для правильного отображения «Дня года», в который поступают данные, но, похоже, вместо этого отображается «время».

 Time_Plot <- Glass_DB %>%
  mutate(`Date amp; Time In Hour` = yday(`Date amp; Time In Hour`)) %>% 
  ggplot(aes(x = `Date amp; Time In Hour`))  
  geom_histogram(bins = 50, colour = "white", fill = "#1380A1")   
  labs(title = "Glass Category Orders",
       subtitle = "Jobs by Day of Year")   
  scale_x_time()   bbc_style()
Time_Plot
 

введите описание изображения здесь

Образец набора данных:

  structure(c(1554973200, 1554811200, 1554811200, 1554811200, 1554793200, 
1554732000), class = c("POSIXct", "POSIXt"), tzone = "UTC")

Date amp; Time In Hour
3/23/2019 11:00
3/7/2019 16:00
2/25/2019 13:00
3/27/2019 13:00
3/28/2019 11:00
3/13/2019 8:00
3/8/2019 9:00
3/20/2019 13:00
3/29/2019 10:00
3/12/2019 15:00
4/1/2019 10:00
 

Обновить:—————————————————

Удалено scale_x_time() , чтобы исправить проблему времени. Есть ли способ показать месяцы по оси X, чтобы сделать график более читаемым.

введите описание изображения здесь

Комментарии:

1. Предпочтительный способ обмена данными с примерами данных dput

2. Вы не хотите, чтобы ось x была временем, поэтому удалите scale_x_time() ее из своего графика. Голосование за закрытие из-за опечатки.

3. Спасибо @Gregor, это решило проблему времени. Теперь он показывает «День» по номеру. Есть ли способ изменить это на месяц или более читаемый способ?

4. Я имею в виду, вы используете yday which возвращает целое число. Если вам не нужно целое число по оси x, не используйте yday . Просто удалите свою mutate строку и поместите переменную с классом datetime на ось x. Поскольку это дата-время, использование scale_x_datetime является подходящим ( datetime , а не просто time ) и будет использоваться по умолчанию. Значение по умолчанию, вероятно, будет хорошим, но вы можете настроить его, например, см. Страницу справки ?scale_x_datetime .

5. Если вы хотите придерживаться своего первоначального подхода, вы также можете указать свои разрывы вручную и пометить их scale_x_continuous(breaks=cumsum(c(1,31,28,31,30,31,30,31,31,30,31,30)), labels =c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") )