複数のグラフを自動作成
複数の変数に基づいて同じグラフを作成したい、ということがあります。 例えば、財務分析なので、横軸を年度、縦軸を各種財務比率、とした折れ線グラフを作成する、というような場合です。
このとき、複数の変数を入れ替えながら、同じグラフを作成するために、何度も同じようなコードを繰り返し書くことは面倒ですし、グラフの設定を少し変えた場合に、すべてのコードを修正しなければならないので、メンテナンス性も悪いです。
そこで、関数を使って、同じグラフを作成するコードを簡潔に書く方法を紹介します。 必要なパッケージを読み込んでから、作図用のデータを作成しておきます。
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
次のパッケージを付け加えます: 'rlang'
以下のオブジェクトは 'package:purrr' からマスクされています:
%@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
flatten_raw, invoke, splice
knitr::opts_chunk$set(dev = "ragg_png")
# データ作成
df <- data.frame(
year = rep(2011:2020),
current_ratio = seq(1,1.1,0.1) + rnorm(10, 0, .1),
debt_ratio = seq(0.5,0.6,0.1) + rnorm(10, 0, .1),
turn_over = rnorm(10, 1, .5)
)
関数を作る。
前に説明したように、自作の関数を作るには、function()
を使います。ggplot()
関数を使って、グラフを作成する関数を作るので、自作関数の引数は、
- df : データフレーム
- x : x軸の変数
- y : y軸の変数
とします。 読み込むデータフレームはデフォルトでdf
としておきます。 では自作関数mygraph()
を作成します。
完成しました。 この関数の意味は、
- 関数名と引数を指定
- x軸とy軸を指定
- 折れ線グラフ
- 散布図
- テーマを
theme_economist()
に設定
ということです。 ここで、変数x
とy
を{{}}
で囲んでいますが、これは、ggplot2
パッケージの新しい機能で、{{}}
で囲むことで、変数名を文字列として扱うことができます。 こうしないと、自作関数の引数をggplot()
関数のaes()
の中に入れることができません。
では使ってみましょう。 データフレーム名はdf
とデフォルトで指定しているので、x
とy
のみを指定します。 x
軸は年度なのでyear
、y
軸は流動比率current_ratio
を指定してみます。
g1 <- mygraph(df = df, x = year,
y = current_ratio,xname = "年度", yname = "流動比率")
print(g1)
負債比率だと、
g2 <- mygraph(df = df, x = year, y = debt_ratio,
xname = "年度", yname = "負債比率")
print(g2)
売上高回転率だと、
g3 <- mygraph(df = df, x = year, y = turn_over,
xname = "年度", yname = "総資産回転率")
print(g3)
図を並べて表示するときは、patchwork
パッケージを使います。
patchwork
を使うと、ggplot2で作成したグラフを格納したオブジェクトを使って、簡単にグラフを縦や横に並べることができる。
横に並べるときは、
と+
でつなげ、縦に並べるときは、
と/
でつなげます。
組み合わせることも可能です。
g1 / (g2 + g3) # g1が上で、g2とg3が横
関数を使うと、同じようなグラフを簡単に作成することができ、patchwork
パッケージを使うと、複数のグラフを並べて表示することができます。 同じようなグラフを作成するときは、関数を使ってみてください。