r - ggplot2: scale_*_time formats incorrectly -
goal
use ggplot2::scale_*_time format time axis in particular way (with recent version of ggplot2).
minimal reprex
# example data tib1 <- tibble::tibble( x = 1:10, y = lubridate::as.duration(seq(60, 600, length.out = 10)) ) using ggplot2::scale_*_time format = "%r" doesn't work - axes formatted using %h:%m:%s:
# doesn't work ggplot2::ggplot(tib1) + ggplot2::geom_point(ggplot2::aes(x,y)) + ggplot2::scale_y_time(labels = scales::date_format(format = "%r")) however, can add time variable (y) arbitrary date, , format resultant datetime object:
# works tib2 <- tib1 %>% dplyr::mutate(z = lubridate::ymd_hms("2000-01-01 00:00:00") + y) ggplot2::ggplot(tib2) + ggplot2::geom_point(ggplot2::aes(x,z)) + ggplot2::scale_y_datetime(labels = scales::date_format(format = "%r")) obviously, i'd prefer not add arbitrary date times axis format correctly (which had until ggplot2::scale_*_time introduced, hope avoid now).
your durations silently converted hms object, displayed hh:mm:ss (i.e. hms). scales::date_format uses format doesn't hms objects, other converting them character vectors. ideally, easy have proper format.hms method can control how shown, stands hms:::format.hms doesn't take format argument.
a solution delete first 3 characters:
ggplot2::ggplot(tib1) + ggplot2::geom_point(ggplot2::aes(x,y)) + ggplot2::scale_y_time(labels = function(x) substring(x, 4))
Comments
Post a Comment