Я бы сделал это следующим образом:
library(lubridate)
#get df1...
#convert hr to something more useable with...
df1$hr <- hour(hm(df1$hr))
ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line()
или, если вы конкретно хотите, "%H:%M"
или аналогично вашей метке оси Xформат времени:
ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line() + scale_x_continuous(breaks = seq(0, 23, 1), labels = paste(seq(0, 23, 1), "00", sep = ":"))
Объяснение : мне никогда не было легко работать со временем и датами, так что если вы можете упроститьпроблема немного, сделайте это.
В вашем случае вас просто интересует час дня, поэтому минуты излишни.Чтобы извлечь только час из вашего времени как символьный тип данных, есть несколько способов, но используя lubridate, вы можете использовать hm(df1$hr)
, который преобразует «10:00» в "10H 0M 0S"
, который является типом данных периода,от которого вы просто хотите час, который вы можете сделать с hour()
, который даст вам 10 в качестве числового типа данных.
Таким образом, в качестве единого лайнера hour(hm(df1$hr))
преобразует «10:00» в 10,тогда ggplot может просто отобразить «Val» против «hr» как числовые типы данных вместо временных или символьных типов данных, что я считаю более легкой задачей.