1. ホーム
  2. r

[解決済み] Rで時系列の陰影をつけるためにgeom_rectを使用する

2022-02-03 13:03:11

質問

時系列プロットのある部分に陰影をつけようとしています(不景気な陰影のようなもので、以下のグラフの下にあるものと似ています)。 この記事は、Excelでの不況の影についてです。 ). 少し、不器用かもしれませんが、説明のためのサンプルを作成しました。 まず時系列を作成し、ggplot2でプロットして、geom_rectを使って陰影を付けたいと思います。しかし、私は引数で何か間違っているはずです。

a<-rnorm(300)
a_ts<-ts(a, start=c(1910, 1), frequency=12)
a_time<-time(a_ts)
a_series<-ts.union(big=a_ts, month=a_time)
a_series_df<-as.data.frame(a_series)
ggplot(a_series)+
  geom_line(mapping=aes_string(x="month", y="big"))+
  geom_rect(
    fill="red",alpha=0.5, 
    mapping=aes_string(x="month", y="big"), 
    xmin=as.numeric(as.Date(c("1924-01-01"))),
    xmax=as.numeric(as.Date(c("1928-12-31"))),
    ymin=0,
    ymax=2
    )

なお、私も試してみましたが、これもうまくいきませんでした。

geom_rect(
        fill="red",alpha=0.5, 
        mapping=aes_string(x="month", y="big"), 
        aes(
           xmin=as.numeric(as.Date(c("1924-01-01"))),
           xmax=as.numeric(as.Date(c("1928-12-31"))),
           ymin=0,
           ymax=2)
        )

<イグ

解決方法は?

コードは正常に動作しますが、10進数の日付に変換する必要があるのは xmin xmax が必要です。 ルブリデート パッケージを使用します。

library("lubridate")
library("ggplot2")

ggplot(a_series_df)+
  geom_line(mapping = aes_string(x = "month", y = "big")) +
  geom_rect(
    fill = "red", alpha = 0.5, 
    mapping = aes_string(x = "month", y = "big"), 
    xmin = decimal_date(as.Date(c("1924-01-01"))),
    xmax = decimal_date(as.Date(c("1928-12-31"))),
    ymin = 0,
    ymax = 2
  )

線の色を変えないように陰影を先にプロットした、よりクリーンなバージョン。

ggplot() +
  geom_rect(data = data.frame(xmin = decimal_date(as.Date(c("1924-01-01"))),
                              xmax = decimal_date(as.Date(c("1928-12-31"))),
                              ymin = -Inf,
                              ymax = Inf),
            aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = "grey", alpha = 0.5) +
  geom_line(data = a_series_df,aes(month, big), colour = "blue") +
  theme_classic()

<イグ