R : geom_segment でグラフの端まで線を引くには

グラフを ggplot2 で作成して、基準値などの特定な値に線を引くときに geom_segment を使いました。
軸が数値の場合は良いのですが、日付のときに躓いて解消したときのメモです。

準備

ライブラリの読み込みと、サンプル用のデータを生成しておきます。

library(tidyverse)

set.seed(1234)
data <- data.frame(
  date = seq(
    as.Date("2021-01-01"),
    length = 12,
    by = "months"
  ),
  y = rnorm(12, 20, 5)
)

日付の軸方向に線を引く

日付の軸に -Inf、Inf を直接指定すると

Error: Invalid input: date_trans works with objects of class Date only

となるので、次の様に structure で Date クラスにして使います。

ggplot(data = data) +
  geom_line(
    aes(
      x = date,
      y = y
    )
  ) +
  geom_segment(
    aes(
      x = structure(-Inf, class = "Date"),
      xend = structure(Inf, class = "Date"),
      y = 18, yend = 18
    ),
    color = "red"
  )

追記:geom_hline を使う

今回の様な用途なら、横線は geom_hline 、縦線は geom_vline の方が良さそうです。
以下のようにしても、同様のグラフになります。

ggplot(data = data) +
  geom_line(
    aes(
      x = date,
      y = y
    )
  ) +
  geom_hline(
    aes(
      yintercept = 18
    ),
    color = "red"
  )
データ分析のためのデータ可視化入門 (Amazon)

コメント