【Rとggplot2】箱ひげ図の作図(基本と色の塗り分けと平均値の入れ方など)

1_箱ひげ図の基本 Rとggplot2

Rで基本の箱ひげ図を作図する方法(ggplot使用せず)

Rに元々入っているデータセット”iris”で早速グラフを描画してみましょう。

今回はiris中のSepal.Lengthについて、Speciesごとに箱ひげ図を描いてみます。

iris #Rに元々入っているデータセットであるirisの中身を確認してみます
boxplot(iris$Sepal.Length ~ iris$Species) #とりあえずRで箱ひげ図を描いてみる

軸のタイトルなどは全くいじっていないので初期設定のままです。

Rで単に作図した箱ひげ図

コード中のSepal.LengthやSpeciesの前にiris$が付いているのは、「”iris”というデータの中の”Sepal.Length”や”Species”の行にある数値を指定しますよ」という意味で、これがないとR側がどこのデータの”Sepal.Length”や”Species”を拾ってくれば良いのか分からずエラーとなります。

具体的には、”object ‘Sepal.Length’ not found” のようなエラーが出ます。

やはり”$マーク”で場所を教えてあげる必要があるということですね。

なお、$マークを使わずに同様のことをすることもできます。

attach(iris) #このコード以降は、irisというデータのみを参照します、というコード.
boxplot(Sepal.Length ~ Species) #$を使わずに上と同じグラフを描くことができる

atatch(iris)は、detatch(iris)と打つと解消されます。つまりRがirisというデータへの執着を止めます。

なお、以下のようなコードにしても同様のグラフを描画できます。これはどのデータフレームをデータ拾いの対象にするか先に”data = iris” で示しておくパターンですね。

boxplot(data = iris, Sepal.Length ~ Species) #この表記でも同じグラフが描ける

このように、「何というデータフレーム内の数値を参照すべきか」をRに提示する方法は色々あります。

以上がRを使用した箱ひげ図の書き方の基本です。

ggplot2で基本の箱ひげ図を描画する方法

基本の箱ひげ図

とりあえずggplotで箱ひげ図を描いてみましょう。

ggplot2で箱ひげ図を描くときはgeom_boxplot()を使います。

#箱ひげ図
install.packages("ggplot2") #ggplot2のインストール
library(ggplot2) #ggplot2の読み込み Rを起動したら毎回これが必要です。
iris #Rに元々入っているデータセットであるirisの中身を確認してみます
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) + 
  geom_boxplot()

とまあ、こんな感じになります。

では、少しずつカスタマイズしていきます。

色の塗り分け

では、まずは色の塗り分けから。aes内でcolorを指定します。

具体的には、以下のコードのように、colorを指定してSpeciesごとに色を塗り分けるようにaes内で指示を出します。ボックスを構成する線が色分けされます。塗りつぶしは何も指定していないので、どのボックスも白く塗りつぶされています。なお、自動的に凡例が入ります。

colorを指定することで、ボックスの枠線の塗り分けを行う際に何を基準に塗り分けるか(例の場合Species列の項目別)を指定しています。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, color = Species)) + 
  geom_boxplot() #でSpeciesごとに色を塗り分けるための "color = Species"
ggplot2で作った箱ひげ図の色の塗り分け

続いて、以下のようにfillを指定したコードを変更すると、Speciesごと(ボックスごと)に塗りつぶす色を変えることができます。簡単に塗り分けられるので便利です。

fillを指定することで、何によって塗り分けるか指定することができます。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot() #Speciesごとに塗りつぶしの色を変える
ggplot2で作った箱ひげ図の色の塗り分け

では、colorの指定とfillの指定を同時に行うとどのようになるのか気になりますよね。以下のようなコードを実行すると、このような箱ひげ図になってしまいます。線の部分の色と塗りつぶしの色がどちらもSpeciesごとに設定され、しかも同じ色なので、これだと箱ひげ図としては使用できないかなと思います。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, color = Species, fill = Species)) + 
  geom_boxplot()
ggplot2で作った箱ひげ図の色の塗り分け

ボックスを塗りつぶす色の透過度を変える

以下のように、geom_boxplot()内のalphaの値を指定することで、ボックスを塗りつぶす色の透過度をを変えることができます。

色味を変えずに色の濃さを変えたいというときに便利です。

alpha = 0.6に設定してみました。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(alpha = 0.6)
ggplotで箱ひげ図の透明度を調節する
ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(alpha = 0.2)

続いて、alpha = 0.2に設定してみました。だいぶ色が薄くなりますね。

ggplotで箱ひげ図の透明度を調節する

箱ひげ図の幅を変える

箱ひげ図の箱の部分(ボックス)の幅を調節することもできます。

ggplot()内のwidthを指定します。まずはwidth = 0.6に設定してみます。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(width = 0.6)
ggplotで箱ひげ図の幅を調節する

続いて、width = 0.2に設定してみましょう。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(width = 0.2)
ggplotで箱ひげ図の幅を調節する

結構印象が変わると思いますので、場面によって使い分けたいですね。

箱ひげ図の線の太さを変える

ggplot()内のlwdを指定します。lwdの数値によって箱ひげ図を描くのに使用する線の太さが変化します。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(width = 0.2, lwd = 2)

lwd = 2に設定してみたのですが、結構太くなっている印象ですね。

ggplotで箱ひげ図の囲み線を調節する

箱ひげ図に平均値を記載する

箱ひげ図に平均値を入れることもできます。例えばこんな感じです。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(alpha = 0.6)+
  stat_summary(fun = mean, geom = "point", color = "black", pch = 3, size = 5) 
ggplot2で箱ひげ図に平均値を入れる

pchを指定することで、平均値を示すプロット(マーカー)の種類を変えることができます。結構色々な種類があるので、興味のある人は調べてみてください。

sizeを指定することで、プロットのサイズを変更することができます。

ggplot(data = iris, aes(x = Species, y = Sepal.Length, fill = Species)) + 
  geom_boxplot(alpha = 0.6)+
  stat_summary(fun = mean, geom = "point", color = "black", pch = 4, size = 5) 
ggplot2で箱ひげ図に平均値を入れる

その他

最近はエクセルでも一応箱ひげ図が作れるようになっているみたいですが、エクセルの場合は結構手間がかかるようですね。

一方で、ggplot2を使うととても簡単に箱ひげ図を作ることができます。資料作成等で箱ひげ図を要求された場合、ggplot2を使用するのが最も簡単な方法なのではないでしょうか。

なお、コードの表記はSyntaxHighlighter Evolvedを使用しています。このようなプラグインを使用することでソースコードが劇的に見やすくなったと思います。

なかなかR言語に対応しているプラグインがありません。私も最初はあまり調べずに、よく使用されているからという理由でHighlighting Code Blockをインストールしましたが、使用する段階になってR言語に非対応だと知り、R言語対応のものを探したところ、評判の良かったSyntaxHighlighter Evolvedにたどり着きました。

この記事を書いた人
あをみどり

30代技術職(研究開発)です。週末は子どもと出かけた先で写真撮影をしています。このブログでは機材のレビューやお出かけの記録を配信しています。
そのほか、Rやggplotについて備忘録的に色々書こうと思っています。

あをみどりをフォローする
Rとggplot2
スポンサーリンク
シェアする
blue green photography
タイトルとURLをコピーしました