Search code examples
rggplot2powerbigeom

How do I using scale_y_datetime breaks time 1 hours


How do I using scale_y_datetime breaks time 1 hours.

Data Power Bi

Date    Start   Stop    Threshold
01-Jun-20   23:10   3:53    07:00
02-Jun-20   23:09   3:46    07:00
03-Jun-20   23:09   3:34    07:00
04-Jun-20   23:07   3:55    07:00
05-Jun-20   23:07   3:59    07:00
06-Jun-20   23:07   4:26    07:00
07-Jun-20   23:07   3:32    07:00
08-Jun-20   23:12   3:55    07:00
09-Jun-20   23:08   4:34    07:00

I want it to Y axis in breaks time 1 hours.

enter image description here

library(scales)
library(ggplot2)
df <- dataset
Hour=format(as.POSIXct(strptime(dataset$Start, format="%Y-%m-%dT%H:%M:%S")), format="%H:%M")
Hour1=format(as.POSIXct(strptime(dataset$Stop, format="%Y-%m-%dT%H:%M:%S")), format="%H:%M")
Hour2=format(as.POSIXct(strptime(dataset$Threshold, format="%Y-%m-%dT%H:%M:%S")), format="%H:%M")
Day=format(as.POSIXct(strptime(dataset$Date, format="%Y-%m-%d")), format="%d-%b-%y")
lims = as.POSIXct(strptime("23:00","08:00"), format = "%H:%M")

ggplot(df, aes(x = Day , group = 1)) + 
geom_line(aes(y = Hour, colour = 'Start')) +
geom_point(aes(y = Hour, colour = 'Start')) +
geom_line(aes(y = Hour1, colour = 'Stop')) +
geom_point(aes(y = Hour1, colour = 'Stop')) +
geom_line(aes(y = Hour2 , colour = 'Threshold'), linetype = 5) + 
geom_point(aes(y = Hour2, colour = 'Threshold')) +
xlab("Day") +
ylab("Time") +
labs(colour="Legend") +
theme(axis.text.x=element_text(angle=20))+
theme(axis.text.y=element_text(angle=45)) +      
scale_y_datetime(breaks=date_breaks('1 hour'), 
                            labels=date_format('%H:%M'))

I don't know how to using scale_y_datetime.

scale_y_datetime(breaks=date_breaks('1 hour'), 
                            labels=date_format('%H:%M'))

Solution

  • I can do it. Cause are time zones and formats times, date

    enter image description here

    library(scales)
    library(ggplot2)
    
    Day=format(as.POSIXct(dataset$'Date', format="%Y-%m-%dT%H:%M:%S"), format="%Y-%b-%d")
    
    ggplot(dataset, aes(x = Day , group = 1)) + 
    geom_line(aes(y = as.POSIXct(dataset$'Start', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Start')) +
    geom_point(aes(y = as.POSIXct(dataset$'Start', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Start')) +
    geom_line(aes(y = as.POSIXct(dataset$'Stop', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Stop')) +
    geom_point(aes(y = as.POSIXct(dataset$'Stop', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Stop')) +
    geom_line(aes(y = as.POSIXct(dataset$'Threshold', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Threshold'), linetype = 5) +
    geom_point(aes(y = as.POSIXct(dataset$'Threshold', format="%Y-%m-%dT%H:%M:%S",tz="UTC"), colour = 'Threshold')) +
    scale_y_datetime(limits= c(as.POSIXct('1899-12-31 22:00:00',format='%Y-%m-%d %H:%M:%S',tz="UTC"),as.POSIXct('1900-01-01 08:00:00',format='%Y-%m-%d %H:%M:%S',tz="UTC")) ,breaks=date_breaks('1 hours'),labels=date_format('%H:%M'))+
    xlab("Day") +
    ylab("Time") +
    labs(colour="Legend") +
    theme(axis.text.x=element_text(angle=90))+
    theme(axis.text.y=element_text(angle=45))