1. ホーム
  2. r

[解決済み] ggplot scale_x_datetime による軸のラベルと限界値

2022-02-12 16:02:37

質問

日付、曜日、時間をX軸のラベルにしたグラフをきれいに表示したいのですが、どうすればいいですか?

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:00:00",tz="CET"),as.POSIXct("2012-02-11 00:00:00",tz="CET"),"hours" ),
value= runif(49) )

ggplot() + geom_line(data=test, aes(x=as.POSIXct(date), y=value)) +
theme(text=element_text(size=16),
legend.text=element_text(size=16), 
axis.text=element_text(size=16, colour="black"),
panel.background = element_rect(fill = 'white', colour = 'black'),
axis.title.y = element_text(size=16, vjust = 0.3), 
axis.title.x = element_text(size=16, vjust = 0),
legend.key=element_rect(fill="white")) +
scale_x_datetime( breaks = date_breaks("1 days"), labels = date_format("%a-%d\n%H:%M", tz="CET"),
,limits = c(as.POSIXct("2012-02-09 00:00:00 CET"),as.POSIXct("2012-02-11 00:00:00 CET")))

MWEに含まれるscale_x_datetimeを含めると、以下のようになります。

いくつかの問題・疑問があります。

1) 左側と右側にある空白を取り除くにはどうしたらよいですか?limits()の定義がうまくいきません。

2) 表示される時間(時)、言い換えれば、どのタイムスタンプでラベルを配置するかを設定するにはどうすればよいですか。

3) このようにタイムスタンプを変更すると

test <- data.frame(date=seq(as.POSIXct("2012-02-09 00:59:00",tz="CET"),as.POSIXct("2012-02-11 00:59:00",tz="CET"),"hours" ),
value= runif(49) )

というメッセージが表示され、プロット結果はタイムスタンプが00分と表示されます。これを変更する方法はありますか?

解決方法は?

日付時刻のベクトルを作り、それを breaks 引数で指定します。以下、私はこれを seq .

設定 expand = c(0, 0) ggplot が余分なスペースを与えないようにします。

ggplot(data = test, aes(x = as.POSIXct(date), y = value)) +
  geom_line() +
  scale_x_datetime(
    breaks = seq(as.POSIXct("2012-02-09 00:59:00 CET"),
                 as.POSIXct("2012-02-11 00:59:00 CET"), "8 hours"),
    labels = date_format("%a-%d\n%H:%M", tz = "CET"),
    expand = c(0, 0),
    limits = c(
      as.POSIXct("2012-02-09 00:00:00 CET"),
      as.POSIXct("2012-02-11 00:00:00 CET")
    )
  )