ggplot2を用いて散布図と周辺分布をプロットする2つの方法をお伝えします。

最初の方法は、ggExtraパッケージのggMarginal関数を用いる方法で、周辺分布を簡単にプロットすることができます。

二番目の方法は、散布図と周辺分布を作成した上で、一つにまとめる方法です。

それぞれ一長一短があります。
最初の方法は、コード量が少ないですがグラフとしての見栄えや汎用性が二番目の方法よりは劣ります。
二番目の方法は、コード量が増えますがグラフとしての見栄えや汎用性が最初の方法よりは勝ります。
自分の確認用であれば最初の方法、他人がみる資料作成には二番目の方法を用いるなど、状況に応じて使い分ける必要があるかもしれません。

実際のコードとプロットされたグラフを合わせてご紹介します。

ggExtraパッケージを用いる方法

ggExtraパッケージのggMarginal関数を用いると、周辺分布を簡単にプロットできます。
ggMarginal関数の第一引数にはggplotオブジェクトを指定します。
また、type引数で周辺分布を「密度分布」「ヒストグラム」「箱ひげ図」「バイオリンプロット」として描くことを指定できます。
実際に、それぞの場合のコードとグラフを見ていきます。

密度分布


library(ggplot2)
library(ggExtra)
data("iris")

g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
g <- g + geom_point()
ggMarginal(
  g,
  type = "density",
  margins = "both",
  size = 5,
  groupColour = TRUE,
  groupFill = TRUE
)

ヒストグラム


library(ggplot2)
library(ggExtra)
data("iris")

g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
g <- g + geom_point()
ggMarginal(
  g,
  type = "histogram",
  margins = "both",
  size = 5,
  groupColour = TRUE,
  groupFill = TRUE
)

箱ひげ図


library(ggplot2)
library(ggExtra)
data("iris")

g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
g <- g + geom_point()
ggMarginal(
  g,
  type = "boxplot",
  margins = "both",
  size = 5,
  groupColour = TRUE,
  groupFill = TRUE
)

バイオリンプロット


library(ggplot2)
library(ggExtra)
data("iris")

g <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
g <- g + geom_point()
ggMarginal(
  g,
  type = "violin",
  margins = "both",
  size = 5,
  groupColour = TRUE,
  groupFill = TRUE
)

散布図と周辺分布を作成して一つにする方法

散布図と周辺分布を作成した上で、一つにまとめる方法をご紹介します。

それぞれを一つにまとめるには、gridExtraパッケージのgrid.arrange関数を用います。
grid.arrange関数は、グリッド状にggplotオプジェクトを配置することで一つのものとして取り扱います。
注意点としては、グリッド状に散布図と二つの周辺分布を配置したときには空欄用のggplotオブジェクトを指定しなければならないことです。
次のコードでは、panel.blankが空欄用に該当します。


library(ggplot2)
library(gridExtra)
data("iris")

panel.main <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
panel.main <- panel.main + geom_point()
panel.main <- panel.main  + theme(legend.position = c(1, 1),
                                  legend.justification = c(1, 1))

panel.top <- ggplot(iris, aes(x = Sepal.Length, fill = Species))
panel.top <- panel.top + geom_density(alpha = 0.5)
panel.top <- panel.top + theme(legend.position = "none")

panel.right <- ggplot(iris, aes(x = Sepal.Width, fill = Species))
panel.right <- panel.right + geom_density(alpha = 0.5)
panel.right <- panel.right + coord_flip()
panel.right <- panel.right + theme(legend.position = "none")

panel.blank <- ggplot()
panel.blank <- panel.blank + geom_point(aes(1, 1), colour = "white")
panel.blank <- panel.blank + theme(plot.background = element_rect(colour = "white"),
                                   panel.grid.major = element_blank(),
                                   panel.grid.minor = element_blank(),
                                   panel.border = element_blank(),
                                   panel.background = element_blank(),
                                   axis.title.x = element_blank(),
                                   axis.title.y = element_blank(),
                                   axis.text.x = element_blank(),
                                   axis.text.y = element_blank(),
                                   axis.ticks = element_blank())
grid.arrange(panel.top,
             panel.blank,
             panel.main,
             panel.right,
             ncol = 2,
             nrow = 2,
             widths = c(5, 1),
             heights = c(1, 5))

関連する記事

  • 度数分布表とヒストグラム度数分布表とヒストグラム 数値データの集合をただ眺めても、そのデータの特徴をつかむのは大変難しい。しかし、そのデータを表にまとめたもの、またはグラフにすると一目瞭然だ。特に、グラフにしたものは、大変分かりやすい。表にまとめたものを度数分布表、グラフにしたものをヒストグラムという。 では、早速具体的に見ていく。 度数分布表 度数分布表とは、以下の表のことを言う。ここで用いたデータは、統計Rに付 […]
  • 顧客満足度調査から重要な改善点を導く方法顧客満足度調査から重要な改善点を導く方法 顧客満足度調査とは、顧客に対して提供している商品やサービスに対して、顧客がどれだけ満足しているか、または不満を持っているか、満足している点はどこか、不満を持っている点はどこかなどをアンケートなどにより調査することだ。 顧客満足度調査の結果は、各項目ごとに平均値を出したり、棒グラフやレーダーチャートにすることが多い。 もし、あなたが顧客満足度調査の結果を見て、「ある […]
  • Bioconductor HeatplutsパッケージのregHeatmapで文字の大きさを変えるBioconductor HeatplutsパッケージのregHeatmapで文字の大きさを変える BioconductorのHeatplusパッケージのregHeatMap関数を用いると、ヒートマップを描けるが、行と列の文字の大きさを変える方法が分かり難かったので、備忘録として残しておく。 サンプルデータのために、Biobaseパッケージをインストールしておく。 > […]
  • R 関数の引数が省略記号(…)を持つかどうかを判定する方法R 関数の引数が省略記号(…)を持つかどうかを判定する方法 ある関数の引数に省略記号である三連ドット(...)を持つかどうかを判定する関数を作成しましたので共有いたします。 判定する関数は次になります。 is_dots […]
  • 教師あり学習と教師なし学習のふわっとした説明教師あり学習と教師なし学習のふわっとした説明 機械学習の教師あり学習と教師なし学習について、難しい専門用語を全く使わずに概要を分かりやすく説明してみます。 プログラムとは まず、プログラムについてふわっと説明します。 このページをご覧になられているということは、ブラウザと呼ばれるプログラム(例えば、Google ChromeやMicrosoft Edge、Mozilla Firefox、Apple […]
R ggplot2を用いて散布図と周辺分布をプロットする方法