論文作成・統計

【Rテクニック】facet_gripとfacet_wrapの使い方とタイトルラベルを変えたい!

facet_gripとfacet_wrapは複数グラフを一度に作成できるのでとても便利です!

またビジュアルとしてとても有用で、魅力的なグラフになります。

タイトルラベルを変えるのは少しテクニックがありますので、それを含めて紹介します。

それではいってみましょう!

facet_gridとfacet_wrapの使い方

facet_gridとfacet_wrapはどちらもデータをグループごとに並べるものになります。いつも便利なiris dataを用いていきます。

facet_gridを使ってみる!

まずはデータの準備をします。

tidyverseを起動しています。

#作業ディレクトリのセット
setwd("~/Rpractice/")

#libraryの起動
library(tidyverse)

#irisデータ
a <- iris

> head(a)
  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
> 

まずはfacet_gridの使い方を見てみましょう!

まずは水平方向です。

facet_gridのカッコの中を(. ~ Species)で指定しています。

ggplot(a, aes(x = Sepal.Length, 
              y = Sepal.Width, 
              color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = TRUE)+
  facet_grid(. ~ Species)

次は垂直方向です!

これは反対にfacet_grid(Species ~ .)で指定しています。

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = TRUE)+
  facet_grid(Species ~ .)

このような感じになりました。

今回は1行または1列で表示しましたが、それぞれ垂直方向、水平方向を指定して複数の行列で表示することもできます。

facet_wrapを使ってみる!

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = TRUE)+
  facet_wrap(~ Species)  #ドットは不要です

2行にしてみましょう。

facet_wrapのカッコの中のncolまたはnrowで指定できます。

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = TRUE)+
  facet_wrap(~ Species, nrow = 2)

スケールを別々にする方法

スケールが合わさっていると極端に偏ったグラフが出来てしまうことがあります。

そのときはscales = “free”を設定します。

ただし、逆に見にくくなることもあるので注意をしてください。

ファセットラベルの変更の仕方

これを変更する一つの方法はデータを変更してしまうことです。

もう一つの方法として、labellerを指定します

早速やり方を見ていきましょう。

labellerの設定をする

facet_gridまたはfacet_wrapでlabeller = labellar()で指定をすることができます。

下記の方法は少しテクニックが必要ですが、真似をするだけで変更できます。

Att.labs <- c("Att:Setosa", 
              "Att:Versicolor", 
              "Att:Virginica")
names(Att.labs) <- c("setosa",
                      "versicolor",
                      "virginica")

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = FALSE)+
  facet_wrap(~ Species,  scales = "free", 
             labeller = labeller(Species = Att.labs))

またタイトルやサブタイトルもつけることができます

タイトル、サブタイトルをつける!

タイトルのラベルはlabs(title = )でしていできます。

また同様にlabsでサブタイトルやx軸、y軸のラベルを指定することができます。

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = FALSE)+
  facet_wrap(~ Species,  scales = "free", 
             labeller = labeller(Species = Att.labs)
  )+
  labs(title = "Iris data analysis", subtitle = "Sepal measurement",
       x = "Length",
       y = "Width")

フォントサイズを整えます。またtheme()でその大きさをそれぞれ指定できます。

レジェンドもあんまり役に立っていないので、なくしちゃいましょう。その時はlegend.position = “none”とすることで表示をなくします。

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, 
              color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = FALSE)+
  facet_wrap(. ~ Species,  scales = "free", 
             labeller = labeller(Species = Att.labs))+
  labs(title = "Iris data analysis", 
       subtitle = "Sepal measurement",
       x = "Length", y = "Width")+
  theme(axis.text.x = element_text(vjust = 1, size = 16, 
                                   hjust = 1, face = "bold"),
        axis.text.y = element_text(hjust = 1, size = 16),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        legend.title = element_text(size=16),
        legend.text = element_text(size=16),
        strip.text.x = element_text(size = 20),
        plot.title = element_text(size=22),
        plot.subtitle = element_text(size=20),
        legend.position = "none")

スケールメモリを統一したほうが実際は見やすいことが多いです。

最後にスケールメモリを統一してみましょう。

theme_classic()で背景を白くしてみます。

ggplot(a, aes(x = Sepal.Length, y = Sepal.Width, 
              color = Species)) +
  geom_point(size = 3, alpha = .5)+
  geom_smooth(method = lm, se = FALSE)+
  facet_wrap(. ~ Species,
             labeller = labeller(Species = Att.labs))+
  labs(title = "Iris data analysis", 
       subtitle = "Sepal measurement",
       x = "Length", y = "Width")+
  theme_classic() +
  theme(axis.text.x = element_text(vjust = 1, size = 16, 
                                   hjust = 1, face = "bold"),
        axis.text.y = element_text(hjust = 1, size = 16),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        legend.title = element_text(size=16),
        legend.text = element_text(size=16),
        strip.text.x = element_text(size = 20),
        plot.title = element_text(size=22),
        plot.subtitle = element_text(size=20),
        legend.position = "none")

それぞれを比較するにはとても見やすくなったと思います。

facet_gridとfacet_wrapはとても便利ですよね!

お役に立ちましたら幸いです。