R: ggplot の基本的な使い方
UB3/informatics/r/r_ggplot
このページの最終更新日: 2024/09/30- 概要: ggplot の基本的な使い方
- ステップ 1: キャンパスを描画する
- ステップ 2: + で情報を追加していく
- ステップ 3: plot する
- ggplot で作れるグラフの例
- ggplot グラフオプション
- その他 ggplot メモ
広告
概要: ggplot の基本的な使い方
ggplot は、きれいなグラフ・複雑なグラフを作成できる R のパッケージ、またはそのパッケージに含まれる関数である。
このページでは、ggplot のアップデート版である ggplot2 の概要をまとめる。このページを最初に作った 2023 年の時点で、ほぼ ggplot2 しか使われていない状況である。
ggplot2 による図形描画は、以下の 3 ステップから成る (参考)。
- ggplot でキャンバスを準備する
- geom などでグラフをキャンバス上に作成 (重ね書きもできる)
- theme などでフォント、色などの設定を追加
R デフォルトの関数と書き方が異なるため、最初は少々とっつきにくかった。以下の手順が整理できてから使いやすくなってきたので、まずはここから始める。
キャンバスを描画する
散布図を例に説明する。まずは、ggplot でキャンバスを準備する。
最初の ggplot の基本形は以下の通り。data でデータフレームを指定する。aes は、グラフの基本的な形や色を決めるための関数で、ここでは X 軸と Y 軸を指定している。
data = は省略可能で、実際のコマンドは以下のようになる。mtcars は R の 組み込みデータセット、mpg と wt はそれに含まれる列名なので、このコマンドは基本的にどんな状況でも動き、以下のようなキャンパスが表示されるはず。
aes は aesthetics の略で「美的要素」という意味。aes で指定できる項目は以下の通り (4)。
x, y |
多くのグラフで必須である |
color |
点および線の色を指定。散布図で、グループごとに色分けする場合もここ。 |
fill |
塗りつぶしの色を指定。 |
size |
点の大きさ、文字の大きさ、線の太さを指定。value というカラムに様々な値がある場合、size = value とすると、値の大きさに応じて点のサイズが変わる。つまりバブルプロットになる。 |
shape |
点の形を指定 |
linetype |
線の種類を指定 |
group |
色や形を変えずに、単にグループ分けする場合に指定 |
その他 |
xmin, xmax, ymin, ymax, xend, yend |
+ で情報を追加していく
ここに、+ 記号を使ってラベルを追加したり、軸範囲を追加したりしていく (3)。
labs(x = "X label", y = "Y label") +
xlim(10, 40) + ylim(0, 8)
ここでややこしいのは、X, Y 軸のラベルをこのように指定しても、aes 関数の時点で使用するデータは決まっているということである。また、+ が次の行の先頭に来ると "Cannot use `+.gg()` with a single argument. Did you accidentally put + on a new line?" というエラーになる。
散布図に回帰直線を追加する場合など。グラフ描画の関数は geom だが、geom_point は散布図、geom_smooth は回帰直線など、いろいろバリエーションがある。
geom_point()
plot する
同じ作業を、別の方法でやってみる。
g <- g + labs(x = "X label", y = "Y label")
g <- g + xlim(10, 35) + ylim(0, 8)
g <- g + geom_point()
g <- g + geom_smooth(method = "lm", formula = y ~ x)
plot(g)
ggplot などの関数の結果をオブジェクトに格納する。オブジェクト名は、ggplot にちなんで g とするのが格好いい。ただし、この方法はスクリプトが長くなるので、個人的には単に + を重ねていく方が好きである。
最後に plot で g を可視化する。geom_point と geom_smooth があるので、回帰直線のある散布図になる。
ggplot で作れるグラフの例
ggplot で散布図を作る
基本的には上の例の通り。geom_point を使用する。数式を追加するなど、さらに多くのオプションについては、以下のリンクを参照のこと。
ggplot で棒グラフを作る
ggplot の棒グラフは geom_bar である。一つだけ例を示しておく。詳細は ggplot で棒グラフを作る を参照のこと。
ggplot でバブルプロットを作る
詳細は ggplot でバブルプロットを作る を参照。散布図の一種とも言える。
ggplot でバイオリンプロットを作る
詳細は ggplot でバイオリンプロットを作る を参照。
ggplot でヒートマップを作る
詳細は ggplot でヒートマップを作る を参照。
ggplot グラフオプション
g に直接追加していける項目
g <- g + theme_bw() などのように、g に + していくことで設定する項目をまとめた。まだ全てを網羅しているわけではない。
原則として、タイトル、ラベル、他のグラフなど
タイトルなど + labs() |
表示する内容を設定する。まずは、このように labs で X と Y を同時に設定する方法。
または、+ xlab("X軸ラベル") や + ylab("Y軸ラベル") のように個別に指定する。xlab(NULL) でラベルを消せる。 |
軸の設定 |
scale_x_*** および scale_y_*** で設定する。*** の部分には、以下の 4 つのいずれかが入る。
それぞれの中には、以下のようなものが入る。
いくつか実例を示しておく。棒グラフやバイオリンプロットなどでのグループ名は、X 軸上の離散変数と考える。
|
塗りつぶしの色指定 |
塗りつぶしの有無は ggplot(df, aes(x = なんとか, y = なんとか, fill = 塗りつぶしの基準となる列)) のように、ggplot の中で指定する。 どの色で塗りつぶすかは、その後 g に追加していく。カラーパレットで指定したり、マニュアルで指定したりできる。
|
theme_ |
カラーパターンを決める。図はbw()。さらに、theme() の中でもいろいろな項目を指定できる。ページ下の theme() で指定できる項目 も参照のこと。 bw() のほか、classic()、light()、dark() などいろいろ。このページ に例が多数。 |
他の関数 |
以下のような項目は、単純に重ねたい 2 つのグラフを + していけば良い。パッケージのインストールが必要なものもある。
geom_signif() での設定項目について。書き方は、例えばこんな感じ (参考)。 |
theme() で指定できる項目
theme では、g <- g + theme(aspect.ratio=1) などのようにすることで、様々な項目を設定することができる。以下にまとめる。ggplot の図に共通するものが多いが、もちろん図の種類によって適用されないものもある。
アスペクト比 |
theme(aspect.ratio=1) のようにして散布図の縦横比を決めることができる。散布図の場合、1 : 1 にしたいことが多いだろう。 |
軸タイトル書式 |
X 軸、Y 軸タイトルの書式を別々に指定したいときは、axis.title.x および axis.title.y とする。axis.title とすれば、両方をいっぺんに指定できる。
この element_blank と element_text の使い方は、以下の多くの項目で共通である。以下のような項目を指定できる。
|
軸ラベル書式 |
X 軸、Y 軸ラベルの書式を別々に指定したいときは、axis.text.x および axis.text.y とする。element_blank() を指定すれば非表示になる。
|
Legend |
legend.position = 'none' で非表示になる。
|
軸の ticks |
軸から飛び出ている短い線は ticks という。非表示にするには axis.ticks.y = element_blank() のように指定する。 |
パネルのグリッド線 |
panel.grid=element_blank() で非表示になる。grid には major と minor があり、panel.grid.major = element_blank() および panel.grid.minor = element_blank() のように指定できる。 |
パネルの背景色 |
デフォルトでは薄いグレー。panel.background = element_blank() で消せる。 |
パネルの境界線 |
panel.border = element_blank() |
プロットの背景色 |
plot.background = element_blank() |
プロットの余白 |
plot.margin = unit(c(1, 1, 1, 1), "cm") のように指定。4 つの数字は top, right, bottom, left の順番。 |
その他 ggplot メモ
複数の図をまとめて表示するには grid.arrange を使い、grid.arrange(chart_1, chart_2, chart_3, chart_4, ncol = 2) のようにする。
広告
References
- R ggplot2を用いて散布図と周辺分布をプロットする方法
- ggplot2による可視化入門
- ggplotでの軸ラベル、タイトルの扱い方. Link: Last access 2022/07/28.
- ggplot2 — きれいなグラフを簡単に合理的に. Link: Last access 2023/06/20.
- ggplot2を使った描画 その1 箱ひげ図と凡例や軸ラベルの書き方. Link: Last access 2024/07/20.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。