本ページはプロモーションが含まれています

広告 Analysis R グラフ化

R | ggplot2でグラフを書く方法(テーマ、軸、凡例の調整)

これまでにggplot2で散布図を書く方法回帰直線を引く方法について紹介しました。

本記事では、下記の項目について紹介します。

  • グラフのテーマ変更
  • 軸の調整(文字の大きさ、色など)
  • 凡例の調整

本記事で使用するデータ

本記事ではggplot2パッケージに入っているmpgデータセットを使って解説していきます。

mpgデータセットやggplot2がよくわからない!

という方は、こちらの記事から読み進めていただければ理解が深まりますのでオススメです。

関連記事

グラフのテーマ変更 -theme()関数-

では、"mpgデータセット"で、x軸:displ(排気量)と、y軸:hwy(燃費)の関係を、year(年式)ごとに色と形を分けたグラフを使って説明していきます。

作成したグラフはオブジェクトgとします。
以降、レイヤを追加するたびにオブジェクトをg2, g3...としていきます。

# グラフ作成(x軸がdispl、y軸がhwyで、yearごとに色分け)
g <- ggplot(data = mpg,
       mapping = aes(x = displ,
                     y = hwy,
                     color = factor(year),
                     shape = factor(year)))+
  geom_point(size = 3)

#グラフの表示
g
オブジェクトgのグラフ

背景テーマの変更

背景テーマとは、グラフの背景や目盛り、軸ラベルに関わる設定のことです。

テーマには以下の種類があります。

  • theme_grey(gray) デフォルト
  • theme_classic
  • theme_bw
  • theme_dark
  • theme_light
  • theme_linedraw
  • theme_minimal
  • theme_test
  • theme_void

よく使うのは、上から3つ(theme_grey, classic, bw)だと思います。

テーマは以下のように変更します。試しにtheme_classicに変更してみましょう。

# グラフgに、classicテーマを適用
g + theme_classic()
classicテーマ

classicはシンプルなデザインで論文などによく使われています。

g + theme_grey()
greyテーマ
g + theme_bw()
bwテーマ

theme_grey(デフォルトテーマ)とtheme_bwは以下のようなデザインになっています。theme_greyはデフォルトながらスタイリッシュなデザインになっています。イギリス英語のgreyかアメリカ英語のgrayのどちらでもOKです。

このままでは文字が小さかったり軸ラベルがわかりにくいので、より美しいグラフに編集していきます。

目盛りサイズの変更

デフォルトの状態では、軸ラベルや目盛りが小さいため、サイズを大きくしていきます。

theme_xxx(今回はclassic)の中の、base_sizeを設定します。

g2 <- 
  g +   geom_point(size = 3)+
  theme_classic(base_size = 16)

#グラフの表示
g2
g2グラフ

軸ラベルと目盛りが大きくなりましたね!

目盛りの色変更

グラフをよーく見てみると、実は目盛りの色がグレーになっています。画面上だとわかりづらいですが、RStudioで実際にグラフを書いていただけると分かりやすいと思います。

気になる人はtheme()axis.textを使って黒色に変更してしまいましょう。

g3 <- 
  g2 +  theme(axis.text = element_text(color = "black"))

#グラフの表示
g3
g3グラフ

軸ラベル、グラフタイトルの設定

グラフの外観はある程度体裁が整ってきました。

一方で、軸ラベルがhwy, displとなっていて初見では何のグラフか分かりにくいため、ラベルを変更していきます。また、グラフタイトルやサブタイトルも追加しましょう。

軸ラベルやグラフタイトルなどの変更はlabs()で行います。今回はsubtitleがどこに表示されるのか示すために入れていますが、不要であれば省略していただいて結構です。

g4 <-
  g3 +
  labs(title = "燃費と排気量の関係",
       subtitle = "Subtitle",
       x = "Highway miles per gallon",
       y = "Engine displacement",
       shape = "year",
       color = "year"
       )

# グラフの表示
g4
g4グラフ

それっぽいグラフになってきました。

グラフ上で日本語が文字化けした場合(Mac)

Macの場合、グラフタイトルや軸タイトルに日本語を入れると文字化けすることがあります。

そんな時はRStudioの設定を以下のように変えてみてください。

RStudioタブPreferences...GeneralGraphicsタブGraphics DeviceのBackendをAGGに変更

筆者の場合はこの設定で日本語表示できるようになりました。

もしくは、theme_xxxの中でbase_family(いわゆるフォント)を"HiraKakuPro-W3"に変更すると日本語が表示できるようになります。

g +  theme_grey(base_size = 16,
             base_family = "HiraKakuPro-W3")

軸の調整(最大値、最小値、目盛り間隔)

軸ラベルの設定が終わったので、続いて軸の数値調整をしていきます。

軸の調整は、scale_x(y)_continuousを使います。

g5 <- 
  g4 +
  scale_y_continuous(breaks = seq(0, 40, by = 10),
                     limits = c(0, 50))+
  scale_x_continuous(breaks = seq(1, 7, by = 1),
                     limits = c(1.4, 7))

#グラフの表示
g5
g5グラフ

scale_y_continuousの場合、breaksで目盛り線の最小値(0)、最大値(40)と、目盛り間隔(by = 10)を設定し、limitsでグラフの最小値(0)、最大値(50)を設定しています。
limitsでグラフの見栄えの微調整ができるので便利です。

凡例の調整

続いて、凡例がまだ美しくないので整えていきます。

凡例の背景色、枠線の設定

凡例の背景、枠線の色やサイズは、theme()legend.backgroundで設定します。fillが塗りつぶし(今回はwhite)、colorは枠線の色、sizeが枠線のサイズです。

また、legend.title = element_blank()で、凡例のタイトル(今の場合はyear)を消すことができます。

g6 <- 
  g5 + theme(
    legend.background = element_rect(fill = "white",
                                     color = "black",
                                     size = 0.2),
    legend.title = element_blank(),
  ) 

# グラフの表示
g6
g6グラフ

凡例のタイトルが無くなり、凡例に枠線が付きました!

凡例の位置変更

凡例の位置は、theme()内のlegend.positionで設定します。

位置はtop, bottom, right, leftに設定できます。

# 位置をtopにする
g6+ theme(legend.position = "top")
凡例の位置をtopに変更

凡例をグラフ内に入れる

凡例をグラフ内に入れることもできます。

その場合はlegend.positionlegend.justificationを設定します。

グラフ内の右上

g7 <-
  g6 + theme(
    legend.position = c(1, 1),
    legend.justification = c(1, 1))

# グラフの表示
g7

グラフ内の左下

g7 <- 
  g6 + theme(
    legend.position = c(0.05, 0.1),
    legend.justification = c(0, 0))

# グラフの表示
g7

凡例の枠線が軸にかぶってしまった場合は、0を0.05などにして微調整するといいです。

凡例を横に並べる

デフォルトでは、凡例は縦に並んでいますが、横並びにすることもできます。

theme()の中でlegend.directionhorizontalにすることで判例が横並びになります。

g7 <- 
  g6 + theme(
    legend.position = c(1, 1),
    legend.justification = c(1, 1),
    legend.direction = "horizontal")

#グラフの表示
g7

凡例の順番を変えたい場合

Rでは凡例の順番(並び)は自動で決められる(アルファベット順)ため、思っていた並びと異なる場合がよくあります。

今回は年式1999年と2008年の順番を、2008, 1999に入れ替えてみます。

やり方としては、geom_pointのaes()の中でlevelsを指定します。

g <-
ggplot(data = mpg,
       mapping = aes(x = displ,
                     y = hwy))+
  geom_point(aes(color = factor(year,
                                levels = c(2008,1999)),
                 shape = factor(year,
                                levels = c(2008,1999))),
             size = 4)

# グラフの表示
g
凡例の順番を変更

1999と2008が入れ替わりましたね。

凡例タイトルの名前が長いので、変更するか消してしまいましょう。

凡例タイトルを消す

# 方法1
g + theme(legend.title  = element_blank())

# 方法2
g + labs(color = "",
         shape = "")
凡例のタイトルを消去

凡例のタイトルを変更する

g + labs(color = "year",
         shape = "year")
凡例のタイトルをyearに変更

まとめ:ggplot2ではグラフのあらゆる調整が可能!

今回は軸の調整、グラフタイトル、凡例の調整について紹介しました。

次回は グラフの保存方法(PDF, JPEG等)について紹介します。

最後に、今回紹介したすべてのコードをまとめておきますのでコピペして使ってみてくださいね。補足としてcaptionやタイトルを太字にする方法も載せてみましたが、不要な箇所は消してください。

今回紹介したコードまとめ

ggplot(data = mpg,
       mapping = aes(x = displ,
                     y = hwy,
                     color = factor(year),
                     shape = factor(year)))+
  geom_point(size = 3)+
  # テーマの変更
  theme_grey(base_size = 16)+
  # 目盛りの色、数値の変更
  theme(axis.text = element_text(color = "black"))+ #軸の数字の色を設定
  scale_y_continuous(breaks = seq(0, 50, by = 10),
                     limits = c(0, 50))+
  scale_x_continuous(breaks = seq(1, 7, by = 1),
                     limits = c(1.4, 7))+
 # ラベルを付ける
  labs(title = "Title",
       subtitle = "Subtitle",
       y = "Highway miles per gallon",
       x = "Engine displacement",
       color = "Year",
       shape = "Year",caption = "mpg dataset")+
  theme(
    # 凡例(legend)の枠を付ける
    legend.background = element_rect(fill = "white",
                                     color = "black",
                                     size = 0.2),
    # 凡例のタイトルを消す
    legend.title = element_blank(),
    # 凡例の位置を変える(今回はグラフ内の左上のちょい下)
    legend.position = c(0.95, 0.9),
    legend.justification = c(1, 1),
    # 凡例を横並びにする
    legend.direction = "horizontal",
    # 凡例のshapeの背景を無くす
    legend.key = element_blank(),
    # タイトルの編集
    plot.title = element_text(face = "bold"), # boldは太字
    plot.subtitle = element_text(color = " black"),
    plot.caption = element_text(size = 16),
    # 軸タイトルの編集
    axis.title.y = element_text(color = "black"),
    axis.title.x = element_text(face = "bold")
    )

R言語の勉強におすすめの本

今後Rの勉強をしていきたい!という方に、こちらの参考書がおすすめです。
特に、RユーザのためのRStudio実践入門は、tidyverseパッケージに特化して書かれていてとても実用的でしたのでオススメです。私自身、この本を読んでRで出来ることが一気に増えた実感のある本です。kindleで試し読みもできるのでぜひ参考にしてください。

  • この記事を書いた人

かにさん

めんどくさがり日本代表のワーママ。
住んでいる自治体の認可保育料が高いことをキッカケに、全国の保育料まとめブログを書き始めました。
趣味
ブログ執筆、海外ドラマ(刑事モノ)、投資、
面倒なことをいかに楽にこなすか考えること

-Analysis, R, グラフ化
-, , , ,