2017-07-28 16 views
3

ゴールggplot2:規模_ * _時間のフォーマットが間違って

使用ggplot2::scale_*_timeggplot2の最新版での)特定の方法で時間軸をフォーマットします。 format = "%R"ggplot2::scale_*_timeを使用して

最小Reprex

# Example data 
tib1 <- tibble::tibble(
    x = 1:10, 
    y = lubridate::as.duration(seq(60, 600, length.out = 10)) 
) 

は動作しません - 軸は%H:%M:%Sを使用してフォーマットされています

# This doesn't work 
ggplot2::ggplot(tib1) + 
    ggplot2::geom_point(ggplot2::aes(x,y)) + 
    ggplot2::scale_y_time(labels = scales::date_format(format = "%R")) 

しかし、私は時間変数(y)を追加することができます任意の日付を入力し、結果のdatetimeオブジェクトをフォーマットします。

# This 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")) 

軸を正しくフォーマットするために私の時間に任意の日付を追加したくないのは明らかです(これは、ggplot2::scale_*_timeが導入されてからは避けることを望みます)。

答えて

3

あなたの所要時間は黙ってhmsオブジェクトに変換され、常にhh:mm:ss(つまりhms)と表示されます。 scales::date_formathmsオブジェクトでは何も行いません。文字ベクトルに変換する以外はformatを使用します。理想的には、表示される量を制御できる適切なformat.hmsメソッドを持つことは簡単ですが、そのままではhms:::format.hmsは実際にはformat引数を取ることはありません。

ソリューションは、単に最初の3つの文字を削除するには、次のとおりです。

ggplot2::ggplot(tib1) + 
    ggplot2::geom_point(ggplot2::aes(x,y)) + 
    ggplot2::scale_y_time(labels = function(x) substring(x, 4)) 
関連する問題