2017-05-03 1 views
2

01:30:00(01:30 AM)から開始する12時間の時系列データがあります。Rのggplot2を使用してdatetimeの第1軸ブレークポイントを定義する

私は2時間の大きなブレークと1時間のマイナーブレークを望みます。 03AM、05AM、07AM、09AM、午前11時:

私は、デフォルトではこれらの主要な休憩を取得してい休憩とdate_minor_breaks

を設定するggplot2、およびscale_x_datetimeを使用しています。
2時間、4時、6時、8時、10時00分

私はdatetimeデータ型でこれを行う方法はわかりませんが、ブレークのベクトルは手動で設定できます。
私は最初のメジャーティックマーク(最初のブレーク)を指定してデフォルトを上書きできると思っていました。その後、 "ブレーク"が残りの部分を埋め込むことができました。
私はブレークのベクトルをハードコーディングしないようにしたいと思います。このコードは再利用可能である必要があります(開始時間が異なるデータセットの場合)。サンプルデータの

#quick sample data set 
DF_test <- data.frame(matrix("NA", ncol = 2, nrow = 6)) 
DF_test$TS <- as.POSIXct(
      c("2017/01/01 01:30:00", 
      "2017/01/01 03:40:00", 
      "2017/01/01 05:10:00", 
      "2017/01/01 07:05:00", 
      "2017/01/01 09:25:00", 
      "2017/01/01 11:00:00" 
      ), 
      tz="UTC",origin="1970-01-01",usetz=F) 
DF_test$value <- c(50,51,45,50,57,49) 

#Create plot 
ggplot(DF_test) + 
    scale_x_datetime(breaks = date_breaks("2 hour"), 
        date_minor_breaks = "1 hour", 
        labels = date_format("%I\n%p")) + 
    geom_line(aes(TS, value)) 

プロット:

enter image description here

あなたが興味を持っている場合 - 最終目標:

プロット4時間の主要な休憩と

enter image description here

答えて

2

ますseq.POSIXt()を使用できます最小から最大までPOSIXctby = "2 hour"を使用してx軸ラベルを生成します。その後、lubridate::ceiling_dateを使用して次の時間に丸めます。これは望ましい出力ですか?あなたの最終的な目標との関係で

library(ggplot2) 
library(scales) 
library(lubridate) 
ggplot(DF_test) + 
scale_x_datetime(breaks = seq.POSIXt(ceiling_date(min(DF_test$TS), unit = "hour"), 
             ceiling_date(max(DF_test$TS), unit = "hour"), by = "2 hour"), 
             labels = date_format("%H:%M %p")) + 
geom_line (aes(TS, value)) 

enter image description here

、ちょうど"4 hour"

によって by引数 "2 hour"に置き換えます
関連する問題