CC BY 4.0
データ解析の基本は、データを可視化してその特性を掴むことである.どんな優れた料理技法 (解析手法) を施しても材料 (生データ) が悪いと、美味しいもの (結果) は出来上がらない.
tidyverseパッケージのインストール/ロードtidyverseは、データの前処理に優れたdplyrパッケージや可視化に優れたggplot2パッケージなどを含むパッケージ群である.tidyverseがあるからRでデータ処理が扱いやすいといっても過言ではない.
tidyverseのインストールが未実施の場合、install.packages関数により、まずはインストールを行う.
library関数を用いて、tidyverseを呼び出す.
irisデータを用いたggplot2のチュートリアルRに標準で格納されているirisデータをデモとして扱う.
irisデータとは、3種のアヤメ (setosa、versicolor、virginica) のがくの長さと幅 (Sepal.length、Sepal.Width)、花びらの長さと幅 (Petal.Length、Petal.Width) を50サンプルずつ調査したデータセットである.
まずは、irisデータの中身を見てみよう.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
ggplot関数でグラフを作成し、データを可視化してみる. ggplot2は、コードのシンプルさに加え、詳細なオプションが幅広く用意されており、Rでのデータ可視化・グラフ描出において非常に優れたパッケージである.単にいろんなグラフを描けるだけでなく、一貫性のある文法で合理的に描ける.
簡単な散布図として、花びらの長さ (Petal.Length) をx軸、花びらの幅 (Petal.Width) をy軸としてグラフを描いて、関係を確認する.
x 座標および y 座標の情報は ggplot関数の中の aes関数の中で指定する.指定方法として、データフレームirisの中でx 座標にしたい列の列名(Petal.Length)をxオプションに、 y座標にしたい列名(Petal.Width)をyオプションに指定する.
# ggplotによる作図:散布図
ggplot(iris, aes(x = Petal.Length, y = Petal.Width)) + geom_point(size = 3) + theme(text = element_text(size = 20))花びらの長さと幅には正の相関関係がありそう.つまり、花びらが長いほど、幅も広くなる. cor関数を用いて相関係数の値も確認してみる.以下の通り、相関係数0.96と高い値を示した.
## [1] 0.9628654
同様に、がくの長さ (Sepal.Length) をx軸、がくの幅 (Sepal.Width) をy軸としてグラフを描いて、関係を確認する.
# ggplotによる作図:散布図
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(size = 3) + theme(text = element_text(size = 20))相関係数も算出してみる.
## [1] -0.1175698
がくの長さと幅については、直線関係がみられないことがわかる.相関係数も−0.117と低い. 続いて、アヤメの種類ごとに比較してみる. 改めて、irisデータフレームを確認してみる. Species列がアヤメの種類を示している.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
アヤメ3種類 (Species) をx軸、花びらの幅 (Petal.Width) をy軸としてプロットして、可視化してみる. labsオプションにより、x軸、y軸ラベルの名称を設定することもできる.
# ggplotによる作図:プロット図
ggplot(iris, aes(x = Species, y = Petal.Width)) + geom_point(size = 3) + theme(text = element_text(size = 20)) +
labs(x = "Species", y = "Petal width (mm)")上記のグラフより、アヤメの種類により、花びらの幅が異なり、 virginica > versicolor > setosaの関係性がありそうなことがわかる. 他の花形質についても、アヤメの種類間で比較してみる.
花びらの長さの比較
# 花びらの長さ
ggplot(iris, aes(x = Species, y = Petal.Length)) + geom_point(size = 3) + theme(text = element_text(size = 20))がくの長さの比較
# がくの長さ
ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_point(size = 3) + theme(text = element_text(size = 20))がくの幅の比較
# がくの幅
ggplot(iris, aes(x = Species, y = Sepal.Width)) + geom_point(size = 3) + theme(text = element_text(size = 20))上記のグラフより、アヤメの種類ごとに花器官の形が異なることがわかる.
ggplot2で作成したグラフの保存ggplot関数で作成したグラフについては、作成されたグラフオブジェクトに対して、ggsave関数を適用することで、画像用のファイル拡張子 (.jpg、.pdf、.pngなど)に保存することができる.
改めて、以下の通りirisデータに対して、分類ごとにがくの幅を比較するグラフを描出してみる.
# がくの幅
ggplot(iris, aes(x = Species, y = Sepal.Width)) + geom_point(size = 3) + theme(text = element_text(size = 20))このあと、ggsave関数を動かす. ggsave("name.pdf")で名称は任意に指定する.以下では「Figure」としているが、自分で区別できるに名称付ける.拡張子も名称の際に、任意に指定できる.ここでは、「.pdf」としている.
widthとheightオプションでサイズも設定できる.
ggplot2により作図を行うここでは、read.csv関数を用いて、csvファイルを読みこむ. デモデータとして、コマツナを様々な栄養欠乏条件で栽培した際の多元素濃度 (イオノーム) データがまとめられたcsvファイル demo.csv を読み込む.
Treat列を横軸として、データフレーム内での順番にするために、factorの水準を設定する.
データフレームdemoに対してggplot2により作図を行う.
# プロット図:各処理区におけるP濃度の比較
ggplot(demo, aes(x = Treat, y = P)) + geom_point(size = 3) + theme(text = element_text(size = 15)) +
labs(x = "Treatment", y = "P concentration (mg/g DW)")