こんにちは、IoTエンジニア見習いのくりりんです。
今日は私の大好きなggplot2を紹介していきます!
ggplot2は、私が最も好きなRのパッケージです笑
私がデータの可視化を好きになったきっかけとなったパッケージでもあります!
とにかく楽に綺麗なグラフを描けるのが売りです。
Rは私が初めて触ったプログラミング言語です。
当時はひたすら独学だったので、スクリプトも知らず、パッケージも知らず、IDEも知らず、
コンソールに直書きで頑張ってグラフを描いていました。。。懐かしいです。。。
学びを進めていくうちにggplot2と出会い、
簡単に綺麗なグラフを描けることができた時は本当に感動しましたね~笑
環境構築
記事を読みすすめる前に環境構築を行いましょう!
すでに環境構築してるぜ!という方は読み飛ばしてください。
Rでプログラミングを行うには”R”と”RStudio”をインストールする必要があります。
※RStudioはRを使いやすくするためのIDEです。使用するには先にRをインストールする必要があるので気を付けましょう。
Rの環境構築は多くの記事で紹介されているので検索すればすぐ出てきます。
以下に、わかりやすい記事を貼っておきます。
ggplot2とは
ggplot2は、データをグラフ化するためのRのパッケージです。
R界の巨匠Hadley Wickham氏によって2005年にパッケージ名「ggplot2」としてリリースされました。
「The Grammar of Graphics」という本に記載されている体系を土台として設計されています。
その設計は、“グラフを”文法的に描く”ことを意識しています。
最初はその思想がよくわからなかったのですが、
このパッケージを使っているうちに、だんだんと直感的にグラフを描けるようになりました。
これはggplot2がグラフを一貫性のある文法で描けているからでしょうか。
そんなことを身を持って体験して感動しました笑
ggplot2の設計の基になった「The Grammar of Graphics」にはどのようなことが書かれているのでしょうね。
非常に気になります(読むのは大変そうですが笑)。
ggplot2の強み
私が考える強みは3つです!
- レイヤー式のグラフ構成
- 直感的にグラフを描ける文法
- 初期設定からグラフが美しい
1と2は、ggplot2のコンセプトそのものですね。
1つずつ説明していきましょう。
ggplot2はレイヤー式のグラフ構成
レイヤー式と聞いてピンと来る方がいると思います。
そう、PhotoShopです!笑
私が最初使った時に、PhotoShopのレイヤーと似てる!と感じました。
おそらくPhotoShop使ったことある人ならggplot2に触れただけで理解できると思います笑
PhotoShopが編集したレイヤーを重ねて1枚の画像を作成するのと同じように
ggplot2は複数のレイヤーを重ねて1つのグラフを描きます。
言葉だけだと少し分かりづらいので下に図を載せます。
このような感じで図が描かれます。
キャンバスの上にグラフを描いて、細かな体裁を整えていきます。
ggplot2の文法では、図に示されているキャンバス、グラフ要素、体裁を文法から理解することができます。
それを次に説明していきます。
直感的にグラフを描けるggplot2の文法
ggplot2に慣れてくると、このグラフを描くための文法が本当に便利に感じます。
まずはじめに、ggplot()
でggplotオブジェクトを作ります。
ggplotオブジェクトにgeom_xxx()
系で作るジオメトリックオブジェクトを+
で繋ぐことで足していくことができます。
散布図ならgeom_point()
、棒グラフならgeom_bar()
を足していきます。
ggplotオブジェクトの体裁はtheme()
などのグラフを修飾する関数を+
で繋いで整えていきます。
theme()
は、軸ラベルや目盛りなどの大きさや色などを指定することができます。
軸ラベルの変更は、xlab()
、ylab()
軸の最小値や最大値の変更は、xlim()
、ylim()
といった関数を+
で繋げることで関数名にしたがった一部の体裁を変更することができます。
レイヤー式のグラフ構成の図と合わせて見るとさらにわかりやすいと思います。
キャンバスがggplot()
で作ったggplotオブジェクトです。
キャンバスに載せるグラフの要素がgeom_xxx()
系の関数で描くジオメトリックオブジェクトです。
それらの体裁を整えるのがtheme()
などの修飾関数です。
このように1と2をつなげて見ると、グラフを”文法的に描く”ということが理解できると思います。
とりあえずggplot2でグラフを描いてみる
どのプログラミング言語もそうだとは思いますが、習うより慣れろですね!
習ったらとりあえずやってみる。これ大事(私は割と苦手)。
標準で入っているiris
のデータセットでグラフを描いていきます。
iris
はアヤメ属に関する花弁や萼の特徴量(長さや幅)を提供するデータセットです。
1 2 |
install.packages("ggplot2") library(ggplot2) |
まずはinstall.packages()
で引数に指定したパッケージをインストールします。ここでは引数にggplot2を指定しましょう。
パッケージは一度インストールするだけでいいので、インストール後はコメントアウトしておきましょう。
コメントアウトはコードの先頭に#
を付けるとできます。RStudioではCtrl
+Shift
+C
でカーソルがある行をコメントアウトできます。
次にパッケージを呼びます。
library()
で引数に呼び出したいパッケージを指定します。ここでは引数にggplot2を指定しましょう。
1 2 |
p = ggplot() print(p) |
ggplot()
はggplotオブジェクトを生成する関数です。
変数p
にggplotオブジェクトを代入します。
p
を実行することで白紙のキャンバスが出力されます。
1 2 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) print(p) |
ggplot()
の引数にデータセットを渡して、x軸やy軸の変数を指定すると、
変数の数値に合わせて初期体裁を持ったキャンバスが出力されます。
1 2 3 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() print(p) |
ggplotオブジェクトにgeom_xxx()
系の関数で作るジオメトリックオブジェクトを+
つなげていくことでグラフ要素をキャンパスの上から描けます。
ここではgeom_point()
で散布図を描いています。
1 2 3 4 5 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + theme(axis.title.x = element_text(size = 5, color = "red"), axis.title.y = element_text(size = 20, color = "blue")) print(p) |
theme()
を+
で繋げていくことで軸ラベルの体裁を指定することができます。
theme()
は他の体裁も調整することができます。
体裁を調整する際に、theme()
のどの引数に何を入れるかは、本家のHPで知ることができるので確認するといいでしょう。
1 2 3 4 5 6 7 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + theme(axis.title.x = element_text(size = 5, color = "red"), axis.title.y = element_text(size = 20, color = "blue")) + xlab("萼の長さ") + ylab("萼の幅") print(p) |
xlab()
とylab()
で軸ラベルの変更することができます。
1 2 3 4 5 6 7 8 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + geom_smooth() + theme(axis.title.x = element_text(size = 5, color = "red"), axis.title.y = element_text(size = 20, color = "blue")) + xlab("萼の長さ") + ylab("萼の幅") print(p) |
別のgeom_xxx()
系のグラフ要素を上から描くことも可能です。
前述で説明したイメージにするとこのような感じです。
1 2 3 4 5 |
p = ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + xlab("萼の長さ") + ylab("萼の幅") print(p) |
このようにして、特に図の体裁をいじらなくても、それなりに美しいグラフが描けてしまいます!
これが3つ目のggplot2の強みですね!
Excelでも綺麗なグラフ描けるぜって人もいると思います(昔の私です笑)。
Excelは1つのグラフを描くのには便利ですが、複数のグラフの体裁を整えるのが本当に大変です(昔の私が頑張ってマウスでポチポチ整えてました笑);
体裁整えなくていいよーって方もいると思いますが、Excelの初期設定のグラフってダサくないですか。
ならggplot2で体裁が整ったグラフを出力できるスクリプトを作った方が圧倒的に時間と労力のコスパが良いはず!
誰でも親しみやすい文法で、美しいグラフを描けるggplot2を是非使ってみてくださいb
参考文献
ggplot2による可視化入門
ggplot2で魅せる・役立つ・引き立つグラフを!
R|ggplot2 とは
ggplot2 — きれいなグラフを簡単に合理的に
ggplot2: An implementation of the Grammar of Graphics