LoginSignup
2
2

More than 1 year has passed since last update.

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

Posted at

ggpairs()は、GGallyパッケージに入っているやつです。
公式サイトは以下
Extension to ggplot2 • GGally

ggpairsは、こんな感じでggplotで作った図をいくつか配置できます。
2022-06-27-13-15-56.png

うーん。美しい。

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

目次

学習がめんどくさい…という方のためのテンプレート

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

install.packages("ggplot2")
install.packages("GGally")

を忘れずに。では、テンプレートです。

# ライブラリーの読み込み
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 #色の基準(1要因を想定)
# バイオリンプロットの関数化
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

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

もうちょっとちゃんと解説してほしい?仕方ない

ということで、基本の書き方から中身のコードの解説をざっとしていきます。

ggpairs()の基本の書き方

基本の書き方はこんな感じ

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の中身編)

中身ってのは例えば

upper = list(continuous = "smooth")

のうちの、listの中身のことです。以下解説

  • continuous
    • グラフの種類を指定するやつ。
    • 連続値 X 連続値のときにどんな種類のグラフを表示させるか
    • 種類の指定は色々あるので後述
  • combo
    • 基本は continuous と同様
    • ただし、離散値 X 連続値のときにどんな種類のグラフを表示させるか
  • discreate
    • 基本は上記2つと同じ
    • ただし、これは離散値 X 離散値のときにどんな種類のグラフを表示させるか

どの種類のデータ型の組み合わせで、どの種類のグラフを指定できるのかは、こちらを参照してください。以下は引用

指定できるグラフ
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’=標示しない

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

各変数の説明(wrap編)

ちなみに、先程紹介した記事によると、こいつらにwrap関数を使って指定してやると、透明度とか指定できるらしいです。以下、サンプルコード

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
自作関数の組み込み方や、グラフのイメージなどとても参考にさせていただきました
【R】ggpairs()あれこれ
めちゃくちゃ写経させて頂いたサイト様
GGallyパッケージのggpair関数を使いこなすための覚え書き : 厚沢部文化財日誌
パッケージの父
ggpairs(): Pairwise plot matrix • GGally

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2