ggplot2 による棒グラフの作成

UB3/informatics/r/ggplot_bar

このページの最終更新日: 2024/10/12

  1. 概要: ggplot2 による棒グラフ
  2. 棒グラフの色を変える
  3. 棒グラフの順番を変更する
  4. 棒グラフをグループに分ける
  5. 棒グラフを 90 度回転させる
  6. 中央から左右に開いた棒グラフ

広告

概要: ggplot による棒グラフ

このページでは、ggplot の geom_bar() 関数を使って棒グラフを作る方法をまとめる。関係の深いページには、以下のようなものがある。

組み込みデータセット の swiss 1 - 5 行を例として使用する。

Rの組み込みデータセット swiss

まずは一番基本的な棒グラフ。

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

geom_bar(stat = "identity") がおかしく見えるが、これは必須である。これを指定しないと、geom_bar は y の数を計算して図示する。この場合、y の値は関係なくなるので、ggplot で y を指定する必要はなくなる。

geom_bar(stat = "identity", width = 1) のようにして、棒グラフの棒の幅を指定することができる。

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

棒グラフの色を変える

まず、ggplot() の aes 部分で fill を使って指定する。以下に示す方法は、バイオリンプロットやバブルプロットなど、色を塗れるプロットでは基本的に同じである。

fill のみを指定すると、グループごとに適当な色が割り振られてしまう。

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

手動で色を設定したい場合には、以下のようにする。次の順番指定でも同様だが、基本的な考え方としては、input のデータフレームに情報を追加して、それを ggplot の aes 部分で指定し、詳細はその次以降で決めるという形になる。

まず、swiss_bar に mutate() 関数 で Color という列を追加。今回は全部同じ色なので、全て A とする。

ggplot の fill で Color 列を指定。

さらに、g + scale_fill_manual(values = c("A" = "blue")) で色を指定する。swiss_bar に追加した A を青で表示せよという意味。

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

青が 3 本、赤が 2 本のようにしたい場合は、それぞれ設定する。scale_fill_manual(values = c(色1, 色2, …)) という書き方で、X 軸に並んだ順番に色 1, 色 2... と色づけられる (参考)。

棒グラフの順番を変更する

棒グラフで表示順を指定したいときは、データフレームに order などという列を作り、順番の数値を入れた上で aes(x = reorder(x軸にしたいカラム、order)) とする。

棒グラフをグループに分ける

グループ分けは、基本的に fill を使って色で分け、geom_bar() に position = "dodge" を入れるという方法で行う。dodge によって、fill で指定したグループが一緒に表示される。

まず、これだとうまく色分けはできて、順番もデータフレームの順番を変更することで指定できているが、dodge が効いていない。なぜならば、X 軸のラベルが Area で、全て異なっているためである。

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

dodge は x で指定したものを一緒にまとめるので、たとえば East と West を設定する。これで棒グラフを 2 つのグループに分けられることになる。ただし、Area のラベルは消えてしまうので、手動で追加しなければならない。

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

棒グラフを 90 度回転させる

+ coord_flip() を使う。

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

中央から左右に開いた棒グラフ

このページ を参考に。右側と左側を別々に作り、それを grid.arrange() で並べる。

まずは、単に 2 つを並べてみる。左側の軸を + scale_y_reverse() で逆向きにしている。Fertility と Agriculture をプロットしてみた。

scale_y_reverse() の中では、scale_y_continuous() と同様、 scale_y_reverse(limits = c(100, 0), breaks = c(0, 50, 100)) のように limits や breaks を指定できる。ただし limits は逆向きになるので注意。Y 軸が通常の向きのときは limits = c(0, 100) だが、reverse の場合は 100, 0 とする。

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

Y 軸ラベルがダブっているので、右側の図のラベルを消す。さらに色々して図をきれいにしたもの。

grid.arrange では、それぞれのカラムの幅を widths で指定できる。

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

References

  1. 生物統計学 geom_bar. Link: Last access 2024/03/28.
  2. 可視化 基礎. Link: Last access 2024/03/28. https://www.jaysong.net/tutorial/R/ggplot_intro2.html

コメント欄

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