GGallyのうちのggpairs()の解説とテンプレート

**2025.03.10 追記**
初めて使う方向けに，より分かりやすく記事を書き直しました
→ [【ggpairs】データを丁寧に見るための ggpairs の使い方【R】 #データサイエンス - Qiita](https://qiita.com/ryu-takahashi2718/items/82dc8bf8872b941ffe0d)

---


ggpairs()は、GGallyパッケージに入っているやつです。
公式サイトは以下
[Extension to ggplot2 • GGally](https://ggobi.github.io/ggally/index.html)

ggpairsは、こんな感じでggplotで作った図をいくつか配置できます。
![2022-06-27-13-15-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/f5a8d88c-8ca4-d583-248d-fe2437ccfe04.png)

うーん。美しい。

この記事は、ggpairsの再学習コストを亡き者にするための覚書なので、「それ違うよ！」って方は優しくご教授いただくか、心に留めておいてください。ガラスのハートなので。

## 目次
- [GGallyのうちのggpairs()の解説とテンプレート](#ggallyのうちのggpairsの解説とテンプレート)
- [学習がめんどくさい…という方のためのテンプレート](#学習がめんどくさいという方のためのテンプレート)
- [もうちょっとちゃんと解説してほしい？仕方ない](#もうちょっとちゃんと解説してほしい仕方ない)
  - [ggpairs()の基本の書き方](#ggpairsの基本の書き方)
  - [各変数の説明(ggpairs編)](#各変数の説明ggpairs編)
  - [各変数の説明(ggpairsの中身編)](#各変数の説明ggpairsの中身編)
  - [各変数の説明(wrap編)](#各変数の説明wrap編)
- [参考サイト](#参考サイト)

# 学習がめんどくさい…という方のためのテンプレート
「ggpairs()の学習がめんどくさいので、パラメータだけいい感じに指定できたらいい感じの図ができてて欲しい。」という方（未来の自分も含む）に向けて、僕が試行錯誤していい感じになったコードを紹介します。関数化する前提で作ったのでグラフ名等は少なめですが、まあ役に立つんじゃないかなと。よろしければどうぞ。
何もかも初めての人は、このテンプレートを実行する前に、
```R
install.packages("ggplot2")
install.packages("GGally")
```
を忘れずに。では、テンプレートです。
```R
# ライブラリーの読み込み
library(ggplot2)
library(GGally)

data(tips, package = "reshape") #試験用データセット
# glimpse(tips)
res.data = tips # 可視化するデータ元
var.data = c("sex","total_bill","tip","smoker") # 可視化する列名選択
var.name = c("性別", "合計","チップ","喫煙") # 可視化するラベルの名前を指定
color.factor = interaction(res.data$sex,res.data$smoker) #色の基準(交互作用想定)
# color.factor = res.data$sex #色の基準(１要因を想定)
# バイオリンプロットの関数化
my_violin = function(data, mapping) {
  ggplot(data = data, mapping = mapping)+
    geom_violin(trim = T,fill = "#999999",
                alpha = .3)+
    # geom_hline(yintercept = 1) +
    theme(legend.position = "none") + 
    geom_boxplot(width = .8 ,fill = "white",alpha = .1)
}
# 描画
ggpairs(data = res.data,
        columns = var.data,
        columnLabels = var.name,
        mapping = aes(color = color.factor),
        upper = list(continuous = "cor",
                     combo = my_violin,
                     discreate = "blank"),
        diag = list(continuous = wrap("densityDiag",
                                      alpha = .5)),
        lower = list(continuous = wrap("smooth",
                                       se = FALSE,
                                       size = .1),
                     combo = wrap("facethist",
                                  alpha = .6),
                     discreate = "facetbar")
)
```
結果はこんな感じになります。
![2022-06-27-13-05-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726043/4129badd-9411-0e05-63ab-1712a3461331.png)

めんどくがりやの方々はお疲れ様でした。

# もうちょっとちゃんと解説してほしい？仕方ない
ということで、基本の書き方から中身のコードの解説をざっとしていきます。

## ggpairs()の基本の書き方
基本の書き方はこんな感じ
```R
library(ggplot2)
library(GGally)

data(tips, package = "reshape") #試験用データセット

ggpairs(data = tips,
        columns = c("sex","total_bill","tip","smoker"), 
        columnsLabels = c("性別", "合計","チップ","喫煙"),
        mapping = aes(color = sex),
        upper = list(continuous = "smooth"),
        lower = list(combo = "facetdensity"),
        diag = list(continuous = "barDiag"))

```
 ## 各変数の説明(ggpairs編)
 - data
   - プロットするのに必要なデータを格納したdata.frame
 - columns
   - dataのうち、表示したいやつだけ指定する
   - ファクト型だから色分けしたいけど、グラフには含めたくない…というときにぜひ
 - columnLabels
   - 表示するときのラベルの名前
   - dataの列名が長かったり日本語にしたいとき活躍
 - mapping
   - カラーの指定とか、fillの指定とか色々できる
   - ggpairs内に書くと、全体に反映される
 - upper
   - 右上の三角部分の表示設定
 - diag
   - 対角線上の表示設定
 - lower
   - 左下の表示設定

## 各変数の説明(ggpairsの中身編)
中身ってのは例えば
```R
upper = list(continuous = "smooth")
```
のうちの、listの中身のことです。以下解説
- continuous
  - グラフの種類を指定するやつ。
  - 連続値 X 連続値のときにどんな種類のグラフを表示させるか
  - 種類の指定は色々あるので後述
- combo
  - 基本は continuous と同様
  - ただし、離散値 X 連続値のときにどんな種類のグラフを表示させるか
- discreate
  - 基本は上記２つと同じ
  - ただし、これは離散値 X 離散値のときにどんな種類のグラフを表示させるか

どの種類のデータ型の組み合わせで、どの種類のグラフを指定できるのかは、[こちら](https://assabu.exblog.jp/28933942/)を参照してください。以下は引用
> **指定できるグラフ**
> **continuous（連続量×連続量）**
> ’points’＝散布図
> ’smooth’＝散布図＋平滑化線
> ’smooth_loess’＝散布図＋平滑化線＋信頼区間
> ’density’=等高線
> ’cor’＝相関係数
> ’blank’＝表示しない
> 
> **combo（連続量×離散量）**
> ’box’＝箱ひげ図
> ’box_no_facet’=ファセットしない箱ひげ図
> ’dot’=ドット
> ’dot_no_facet’=ファセットしないドット
> ’facethist’=ヒストグラム
> ’facetdensity’=密度図
> ’denstrip’=帯状密度図
> ’blank’=表示しない
> 
> **discrete（離散量）**
> ’facetbar’=棒グラフ
> ’ratio’=よくわからない
> ’blank’=標示しない

引用元の記事はとてもわかり易く、詳しいので、ぜひ参照してください。
なお、メソッドとグラフイメージの対応は、[こちら](https://sawad0613.github.io/.github.io-ggpairs/)の記事が大変丁寧なので、作図の際はご参考にされるとよろしいかと。

## 各変数の説明(wrap編)
ちなみに、先程紹介した記事によると、こいつらにwrap関数を使って指定してやると、透明度とか指定できるらしいです。以下、サンプルコード
```R
var_names = c("年齢", "赦し期待", "誠意期待")
sin.pltdata %>% 
  ggpairs(columns = c("age","for.mean","sin.mean"),
          columnLabels = var_names,
          mapping = aes(color = intence),
          lower = list(continuous = wrap("smooth",se = FALSE, size = .5),
                       combo = "facethist"),
          diag = list(continuous = wrap("densityDiag",alpha = 0.5)),
          upper = list(continuous = "cor",
                       combo = "box")
  )

```
wrap()の中身はおなじみですが、一応解説
- se
  - 論理値で指定
  - TRUEで信頼区間が表示される
- size
  - その名の通り、出力するサイズの指定
  - 文字サイズとか、点の大きさとか
- alpha
  - 透明度のこと
  - densityDiagとかこれを指定するといい感じになる


その他いっぱいありますけども、とりあえずはこんな感じで良いのではないでしょうか。


# 参考サイト
きれいにバイオリンプロットを書くためにお世話になりました
[ggplot2でviolinplotを描く - sugioka_R](https://sugioka.wiki.fc2.com/wiki/ggplot2%E3%81%A7violinplot%E3%82%92%E6%8F%8F%E3%81%8F)
自作関数の組み込み方や、グラフのイメージなどとても参考にさせていただきました
[【R】ggpairs()あれこれ](https://sawad0613.github.io/.github.io-ggpairs/)
めちゃくちゃ写経させて頂いたサイト様
[GGallyパッケージのggpair関数を使いこなすための覚え書き : 厚沢部文化財日誌](https://assabu.exblog.jp/28933942/)
パッケージの父
[ggpairs(): Pairwise plot matrix • GGally](http://ggobi.github.io/ggally/articles/ggpairs.html#matrix-sections-1)