ggplot2 による棒グラフの作成
UB3/informatics/r/ggplot_bar
このページの最終更新日: 2024/10/12広告
概要: ggplot による棒グラフ
このページでは、ggplot の geom_bar() 関数を使って棒グラフを作る方法をまとめる。関係の深いページには、以下のようなものがある。
組み込みデータセット の swiss 1 - 5 行を例として使用する。
まずは一番基本的な棒グラフ。
geom_bar(stat = "identity") がおかしく見えるが、これは必須である。これを指定しないと、geom_bar は y の数を計算して図示する。この場合、y の値は関係なくなるので、ggplot で y を指定する必要はなくなる。
geom_bar(stat = "identity", width = 1) のようにして、棒グラフの棒の幅を指定することができる。
棒グラフの色を変える
まず、ggplot() の aes 部分で fill を使って指定する。以下に示す方法は、バイオリンプロットやバブルプロットなど、色を塗れるプロットでは基本的に同じである。
fill のみを指定すると、グループごとに適当な色が割り振られてしまう。
手動で色を設定したい場合には、以下のようにする。次の順番指定でも同様だが、基本的な考え方としては、input のデータフレームに情報を追加して、それを ggplot の aes 部分で指定し、詳細はその次以降で決めるという形になる。
まず、swiss_bar に mutate() 関数 で Color という列を追加。今回は全部同じ色なので、全て A とする。
ggplot の fill で Color 列を指定。
さらに、g + scale_fill_manual(values = c("A" = "blue")) で色を指定する。swiss_bar に追加した A を青で表示せよという意味。
青が 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 で、全て異なっているためである。
dodge は x で指定したものを一緒にまとめるので、たとえば East と West を設定する。これで棒グラフを 2 つのグループに分けられることになる。ただし、Area のラベルは消えてしまうので、手動で追加しなければならない。
棒グラフを 90 度回転させる
+ coord_flip() を使う。
中央から左右に開いた棒グラフ
このページ を参考に。右側と左側を別々に作り、それを 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 とする。
Y 軸ラベルがダブっているので、右側の図のラベルを消す。さらに色々して図をきれいにしたもの。
grid.arrange では、それぞれのカラムの幅を widths で指定できる。
広告
References
- 生物統計学 geom_bar. Link: Last access 2024/03/28.
- 可視化 基礎. Link: Last access 2024/03/28. https://www.jaysong.net/tutorial/R/ggplot_intro2.html
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。