6.5 折れ線グラフ
折れ線グラフは経過時間に伴って変化する量的変数を示すグラフです。ここでは、3つのパターンについて紹介します。
6.5.1 x軸が経過時間、y軸が1つの変数
この場合が折れ線グラフの基本となります。折れ線グラフはgeom_line()
関数で描画します。
<- data.frame(t = 1:10, y = rnorm(10))
df_time df_time
## t y
## 1 1 0.2365249
## 2 2 0.5969464
## 3 3 -0.8829657
## 4 4 0.8606371
## 5 5 -0.9484992
## 6 6 0.1541834
## 7 7 0.8404190
## 8 8 1.3756371
## 9 9 0.2202995
## 10 10 0.1912124
ggplot(df_time, aes(t, y)) +
geom_line()
flights
データの場合に、月ごとの平均遅延時間をプロットするには以下のようにします。
%>%
flights filter(!is.na(arr_delay)) %>%
group_by(month) %>%
summarise(arr_delay = mean(arr_delay), .group = "drop") %>%
ggplot(aes(month, arr_delay)) +
geom_line() +
scale_x_continuous(breaks = 1:12)
最終行のscale_x_continuous()
は、x
軸の目盛りを設定するためのものです。
6.5.2 x軸が経過時間、y軸が2つ以上の変数
2つ以上の量的変数の時間推移を見たい場合は、geom_line()
のaesにおいてgroup
を指定します。
<- df_time %>%
df_time mutate(z = rnorm(10))
df_time
## t y z
## 1 1 0.2365249 1.1301350
## 2 2 0.5969464 0.6943941
## 3 3 -0.8829657 0.5728963
## 4 4 0.8606371 0.6692558
## 5 5 -0.9484992 -0.1335879
## 6 6 0.1541834 0.1261127
## 7 7 0.8404190 2.0127508
## 8 8 1.3756371 -0.3750516
## 9 9 0.2202995 0.7186727
## 10 10 0.1912124 -0.2805223
変数が異なる列に格納されている(横長データ)の場合、一旦縦長に変形して、列名となっていた変数をgroup
に指定します。
%>%
df_time pivot_longer(-t, names_to = "var", values_to ="value") %>%
ggplot(aes(t, value, group = var, color = var)) +
geom_line()
6.5.3 x軸が日付、y軸が2つ以上の変数
以上の例は、x軸は単なる数値でしたが、時間変化のデータの場合、日付であることも多いです。例として以下のようなデータを考えます。
<- read.csv("./data/fukuoka_temp.csv", encoding = "UTF-8")
fuk_temp head(fuk_temp)
## 年月 平均気温 日最高気温の平均 日最低気温の平均
## 1 2010/1/1 6.6 10.3 3.3
## 2 2010/2/1 9.4 13.1 6.0
## 3 2010/3/1 10.9 14.3 7.6
## 4 2010/4/1 13.8 18.1 10.3
## 5 2010/5/1 19.2 23.6 15.6
## 6 2010/6/1 23.5 27.6 20.7
年月
列に文字列として2010/1/1
のような形式で日付の情報が格納されています。このままだと、文字列なので正常に折れ線グラフが描画されません。文字列を日付としてのデータ型に変換する場合は、lubridateパッケージのas_date()
関数を用います。lubridateパッケージもtidyverseに含まれていますが、ロードは同時にされませんので、パッケージの関数を利用することを明示しておきます。
%>%
fuk_temp pivot_longer(-年月, names_to = "type", values_to = "temp") %>%
mutate(年月 = lubridate::as_date(年月)) %>%
ggplot(aes(年月, temp, group = type, color = type)) +
geom_line() +
scale_x_date(labels = scales::date_format("%Y/%m")) +
labs(title = "福岡市の気温")