はじめに

deepblueインターン生の中山です。
以前「真っ黒のグラフを作成してみようかな」と思い、黒で統一した色違いのグラフをggplotで作成致しました。今回はその備忘録としてblogを残しておきます。今回はirisのデータを利用して、散布図の色違いを作成してみます。最初に通常の散布図を示し、その後色違いのグラフを示したいと思います。

plotのグラフ

Rのデフォルト関数であるplotを用いて、散布図の作成をします。

 plot(iris[c("Petal.Width", "Sepal.Length")])
# plot(iris$Petal.Width, iris$Sepal.Length) # こちらでも可

かなり見ずらいです。色がモノクロで、形状も〇で統一されており、どのプロットがどのクラスに該当するのか判別できません。

ggplotのグラフ

ここでは、ggplotを用いたグラフについて説明します。


wikipediaより:
ggplot2は、 統計プログラミング言語Rのデータ視覚化パッケージである。2005年にHadkey Wickhamによって作成されたggplot2は、リーランド・ウィルキンソンのGrammar of Graphicsの実装である。これは、グラフをスケールやレイヤーなどのセマンティックコンポーネントに分割するデータ視覚化の一般的なスキームである。


ggplotのgeom_plot()で可視化

まず、ggplotのthemeを指定せずに、可視化します。
コードとグラフは以下のようになります。

library(tidyverse)
iris %>%
  ggplot(aes(y = Sepal.Length,
             x = Petal.Width,
             shape = Species,
             color = Species,)) +
  geom_point()

themeを設定しないと、上記のグラフとなります。背景がグレーで文字が黒です。プロットの色や形状はSpeciesで指定されているため、デフォルトのplotよりは見やすくなっています。背景がグレーなので「wordやpptに貼りたくはないな」という印象です。

theme_bw()で可視化

ggplotにはthemeが設定されております。今回はその中でも人気なtheme_bw()で可視化してみます。themeは他にも数多くあるので、ggplot2のテーマはどれを使うべきかなどを参考にしてみてください。

iris %>%
  ggplot(aes(y = Sepal.Length,
             x = Petal.Width,
             shape = Species,
             color = Species,)) +
  theme_bw() +
  geom_point()

白黒のはっきりしたグラフになっています。先のグラフとの差分は、theme_bw()があるかないかです。1行追加するだけで、かなり見やすくなるので嬉しいです。このグラフであれば、プレゼン資料でも使いやすいかと思います。

色違いのグラフ

上記では、ベースが白で、文字や枠線が黒のグラフを作成しました。一方本節では、ベースが黒で、文字や枠線が白のグラフを作成したいと思います。
正直、用途はほとんどないため、参考程度に見ていただければと思います。予め決められたthemeは存在しないため、地道に設定していきます。1つずつ設定する事で、細かな色の設定の勉強にはなるかもしれません。
ggplotの設定については、theme functionに列挙されています。

color <- "black"
iris %>%
  ggplot(aes(y = Sepal.Length,
             x = Petal.Width,
             shape = Species,
             color = Species,)) +
  geom_point() +
  theme(rect = element_rect(colour = color, fill = color),
        text = element_text(color = "white"),
        plot.background = element_rect(colour = color, fill = color),
        panel.background = element_rect(colour = color, fill = color),
        panel.border = element_rect(fill = NA, colour = "white", size = 1),
        panel.grid.major = element_line(colour = "grey60"),
        panel.grid.minor = element_line(colour = "grey30"),
        legend.key = element_rect(colour = color, fill = color),
        axis.text = element_text(colour = "white"),
  )

パラメータの説明

簡単にthemeの中で利用したパラメータの説明をすると、

  • rect: rectangle(矩形)の略で、plotの中の四角いもの全般の色を設定しています。
  • text: plotの中の文字全般の色を設定しています。
  • plot.background: plotの背景の事で、グラフや凡例以外の色が変わります。
  • panel.background: plotの中のグラフ部分の背景色を設定しています。
  • panel.border: グラフの枠の設定です。ただ上塗りなので、fill = NAにしておかないと上から色が塗られてしまいます。
  • panel.grid.major: メインの格子色を設定しています。
  • panel.grid.minor: サブの格子色を設定しています。
  • legend.key: 凡例のkey(〇△□)の設定をしています。
  • axis.text: x軸、y軸の数値の色を設定しています。

colourは設定する必要のない箇所もありますが、念のため設定しております。また、グラフによっては、lineを指定した方が望ましいです。
先日、themeを細かく設定した記事を書いたので、良かったら下記も参考にしてください。
(【R・mvtnorm・ggplot】多変量正規分布によるクラス分類の人工データ発生と可視化)

別色のグラフ

colorを最初に"black"と指定してますが、例えば"midnightblue"にすると濃い青のグラフが作れます。

color <- "midnightblue"

まとめ

以上で、ggolotのグラフの色違いを作成するコードについては終わりです。
色設定などの参考になれば幸いです。