R: ggplot の基本的な使い方

UB3/informatics/r/r_ggplot

このページの最終更新日: 2024/09/30

  1. 概要: ggplot の基本的な使い方
  2. ggplot で作れるグラフの例
  3. ggplot グラフオプション
  4. その他 ggplot メモ

広告

概要: ggplot の基本的な使い方

ggplot は、きれいなグラフ・複雑なグラフを作成できる R のパッケージ、またはそのパッケージに含まれる関数である。

このページでは、ggplot のアップデート版である ggplot2 の概要をまとめる。このページを最初に作った 2023 年の時点で、ほぼ ggplot2 しか使われていない状況である。

ggplot2 による図形描画は、以下の 3 ステップから成る (参考)。

  1. ggplot でキャンバスを準備する
  2. geom などでグラフをキャンバス上に作成 (重ね書きもできる)
  3. theme などでフォント、色などの設定を追加

R デフォルトの関数と書き方が異なるため、最初は少々とっつきにくかった。以下の手順が整理できてから使いやすくなってきたので、まずはここから始める。

キャンバスを描画する

散布図を例に説明する。まずは、ggplot でキャンバスを準備する。

ggplot(data = dataframe, aes(x = 列名, y = 列名))

最初の ggplot の基本形は以下の通り。data でデータフレームを指定する。aes は、グラフの基本的な形や色を決めるための関数で、ここでは X 軸と Y 軸を指定している。

data = は省略可能で、実際のコマンドは以下のようになる。mtcars は R の 組み込みデータセット、mpg と wt はそれに含まれる列名なので、このコマンドは基本的にどんな状況でも動き、以下のようなキャンパスが表示されるはず。

ggplot(mtcars, aes(x = mpg, y = wt))

ggplotのキャンパス

aes は aesthetics の略で「美的要素」という意味。aes で指定できる項目は以下の通り (4)。

x, y

多くのグラフで必須である

color

点および線の色を指定。散布図で、グループごとに色分けする場合もここ。

fill

塗りつぶしの色を指定。

size

点の大きさ、文字の大きさ、線の太さを指定。value というカラムに様々な値がある場合、size = value とすると、値の大きさに応じて点のサイズが変わる。つまりバブルプロットになる。

shape

点の形を指定

linetype

線の種類を指定

group

色や形を変えずに、単にグループ分けする場合に指定

その他

xmin, xmax, ymin, ymax, xend, yend

+ で情報を追加していく

ここに、+ 記号を使ってラベルを追加したり、軸範囲を追加したりしていく (3)。

ggplot(mtcars, aes(x = mpg, y = wt)) +
   labs(x = "X label", y = "Y label") +
   xlim(10, 40) + ylim(0, 8)

ggplotのキャンパス

ここでややこしいのは、X, Y 軸のラベルをこのように指定しても、aes 関数の時点で使用するデータは決まっているということである。また、+ が次の行の先頭に来ると "Cannot use `+.gg()` with a single argument. Did you accidentally put + on a new line?" というエラーになる。


軸ラベルを追加するのと同じような感覚で、+ 記号を使ってグラフを重ねることも可能。

散布図に回帰直線を追加する場合など。グラフ描画の関数は geom だが、geom_point は散布図、geom_smooth は回帰直線など、いろいろバリエーションがある。

ggplot(mtcars, aes(x = mpg, y = wt)) +
geom_point()

ggplot 散布図

plot する

同じ作業を、別の方法でやってみる。

g <- ggplot(mtcars, aes(x = mpg, y = wt))
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 で作れるグラフの例

ggplot で散布図を作る

基本的には上の例の通り。geom_point を使用する。数式を追加するなど、さらに多くのオプションについては、以下のリンクを参照のこと。

ggplot 散布図

ggplot で棒グラフを作る

ggplot の棒グラフは geom_bar である。一つだけ例を示しておく。詳細は ggplot で棒グラフを作る を参照のこと。

Rの組み込みデータセット swissの棒グラフ

ggplot でバブルプロットを作る

詳細は ggplot でバブルプロットを作る を参照。散布図の一種とも言える。

ggplotによるバブルプロットの作成

ggplot でバイオリンプロットを作る

詳細は ggplot でバイオリンプロットを作る を参照。

ggplotで作ったviolinプロット

ggplot でヒートマップを作る

詳細は ggplot でヒートマップを作る を参照。

geom_tileによるヒートマップ

ggplot グラフオプション

g に直接追加していける項目

g <- g + theme_bw() などのように、g に + していくことで設定する項目をまとめた。まだ全てを網羅しているわけではない。

原則として、タイトル、ラベル、他のグラフなど ** の有無のような大きな設定はこちらで行い、それらの書式のような小さな設定はページ下の theme() で指定できる項目 で設定する。

タイトルなど

+ labs()
+ xlab
+ ylab

表示する内容を設定する。まずは、このように labs で X と Y を同時に設定する方法。

  • g <- g + labs(title = "文字列", subtitle = "文字列", x = "文字列", y = "文字列", caption = "", tag = "文字列")

または、+ xlab("X軸ラベル") や + ylab("Y軸ラベル") のように個別に指定する。xlab(NULL) でラベルを消せる。

軸の設定

scale_x_*** および scale_y_*** で設定する。*** の部分には、以下の 4 つのいずれかが入る。

  • discrete
  • continuous
  • log10 (対数軸)
  • reverse (軸の向きを逆転)
  • sqrt (平方根軸)

それぞれの中には、以下のようなものが入る。

  • labels
  • breaks
  • limits
  • name (変数の軸ラベルを変える。つまり xlab, ylab と同じ。)

いくつか実例を示しておく。棒グラフやバイオリンプロットなどでのグループ名は、X 軸上の離散変数と考える。

  • scale_x_discrete(labels=c("a","b","c"))
  • scale_x_continuous(limits = c(1, 9))

塗りつぶしの色指定

塗りつぶしの有無は ggplot(df, aes(x = なんとか, y = なんとか, fill = 塗りつぶしの基準となる列)) のように、ggplot の中で指定する。

どの色で塗りつぶすかは、その後 g に追加していく。カラーパレットで指定したり、マニュアルで指定したりできる。

  • scale_fill_brewer(palette = "Set2")
  • scale_fill_manual(values=c("Group1"="red", "Group2"="blue"))

theme_

カラーパターンを決める。図はbw()。さらに、theme() の中でもいろいろな項目を指定できる。ページ下の theme() で指定できる項目 も参照のこと。

ggplot 散布図

bw() のほか、classic()、light()、dark() などいろいろ。このページ に例が多数。

他の関数
グラフ等の重ね書き

以下のような項目は、単純に重ねたい 2 つのグラフを + していけば良い。パッケージのインストールが必要なものもある。

  • 散布図に回帰直線を追加、geom_smooth()。
  • 散布図に確率楕円を追加、stat_ellipse()。
  • バイオリンプロットとボックスプロット
  • 有意差表示。ggsignif パッケージの geom_signif を使う。

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 とすれば、両方をいっぺんに指定できる。

  • 非表示にしたい場合は axis.title.y = element_blank() とする。
  • 表示して書式を設定したい場合は、axis.title = element_text(family = "Arial", size = 20, face = "bold") のように、element_text のカッコ内に情報を入れていく。

この element_blank と element_text の使い方は、以下の多くの項目で共通である。以下のような項目を指定できる。

  • family: フォントファミリーを指定
  • size: フォントサイズを指定
  • face: 太字、斜体などを指定
  • hjust, vjust: 横 horizontal および縦 vertical 方向の位置を指定
  • angle: angle = 90 のようにして回転させる

軸ラベル書式

X 軸、Y 軸ラベルの書式を別々に指定したいときは、axis.text.x および axis.text.y とする。element_blank() を指定すれば非表示になる。

  • axis.text = element_text(family = "Arial", size = 20)
  • axis.text..y = element_blank()

Legend

legend.position = 'none' で非表示になる。

  • legend.title = element_text(size = 12, face = "bold")
  • legend.text = element_text(size = 10)
  • legend.key.size = unit(1, "cm")
  • legend.spacing.x = unit(0.5, "cm")
  • legend.spacing.y = unit(0.5, "cm")

軸の 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

  1. R ggplot2を用いて散布図と周辺分布をプロットする方法
  2. ggplot2による可視化入門
  3. ggplotでの軸ラベル、タイトルの扱い方. Link: Last access 2022/07/28.
  4. ggplot2 — きれいなグラフを簡単に合理的に. Link: Last access 2023/06/20.
  5. ggplot2を使った描画 その1 箱ひげ図と凡例や軸ラベルの書き方. Link: Last access 2024/07/20.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。

このページの目次

1. 概要: ggplot の基礎
  ・キャンパス描画
  ・+ で追加
  ・plot
2. グラフの例
  ・散布図
  ・棒グラフ
  ・バブルプロット
  ・バイオリンプロット
  ・ヒートマップ
3. オプション
  ・g に追加
  ・theme() で指定