2017-08-30 2 views
0

GGally Rパッケージのggpairs()関数のドキュメントに従って、 "lower"/"upper"引数への入力としてカスタム関数を指定することができます。連続離散変数の組み合わせについては、可能であれば、色の美学を使用して別のカテゴリ変数によって階層化されたカテゴリ変数のカテゴリ(好ましくは点を使用して棒を使用すること)の連続変数の手段を単純に表示したいと思います。ggpairs用のカスタムグループ平均関数

私は次のスレッドでいくつかの情報が見つかりました:

https://github.com/ggobi/ggally/issues/218

しかし私ggpairsの知識(とggplot2)は(スレッドでテンプレートから、このようなカスタム関数を作成することができるようにはあまりにも表面的ですまた、変数名 "Species"はテンプレートにハードコードされているように見えます。可能であれば、カスタム関数にハードコーディングされた情報を持たないことをお勧めします。

誰かがテンプレートやソリューションのスケッチで私を助けてくれると大変感謝しています。次の例を使用して(ここで、「custom_function」上記の機能を交換する必要があります):私は私の目的のために十分に働くようでカスタム関数を作っ@aosmithのコメントに基づいて

dat <- reshape::tips 
pm <- ggpairs(dat, 
       mapping = aes(color = sex, alpha = 0.3), 
       columns = c("total_bill", "smoker", "time", "tip"), 
       showStrips = T, 
       lower = list(combo = custom_function)) 
print(pm) 
+1

[この問題](https://github.com/ggobi/ggally/issues/139)は、いくつかを持っていますカスタム関数を書く良い例です。あなたがグループごとにグループ手段を必要とするだけなら、あなたは 'stat_summary'と' ggstance :: stat_summaryh'を使うことができるので、あなたはこれが複雑になるとは思わないでしょう。しかし、私の推測では、数値とカテゴリのyの 'if'ステートメントが必要であり、リンクの' eval'コードが役に立つかもしれません。 – aosmith

+0

@aosmithたくさんありがとう、私はトリックを行うようだあなたの助言に基づいて機能を起草。しかし、私は、カテゴリ変数のラベル付けについて少し混乱しています。私はどんなアドバイスにも感謝しています。 –

+1

すべてが出ていると分かりました。あなたはあなたの質問を編集するのではなく、答えとしてそれを置くべきです。私は、行列の全部で軸ラベルを読むのが難しいことに同意します。 'axisLabels'を "internal"に設定すると、見た目が好きな人は少しでも助けになるかもしれません。もう一つのオプションは、上三角 'combo'に対してデフォルトの' 'box_no_facet ''の代わりに '' box "'を使うことです。 – aosmith

答えて

1

、幅広く、これまでそれをテストし、多分それはとにかく便利ですしていない。

library(GGally) 
library(ggplot2) 
library(ggstance) 

gmean_point <- function(data, mapping, ...) { 

    x <- eval(mapping$x, data) 
    y <- eval(mapping$y, data) 

    if(is.numeric(y)) { 
    p <- ggplot(data) + 
     geom_blank(mapping) + 
     stat_summary(mapping, 
        geom = 'point', fun.y = mean, 
        position = position_dodge(width = 0.2)) 
    } else { 
    p <- ggplot(data) + 
     geom_blank(mapping) + 
     stat_summaryh(mapping, 
        geom = 'point', fun.x = mean, 
        position = position_dodgev(height = 0.2)) 
    } 

    p 

} 

pm <- ggpairs(reshape::tips, 
       mapping = aes(color = sex, alpha = 0.3), 
       columns = c("total_bill", "smoker", "time", "tip"), 
       showStrips = T, 
       lower = list(combo = gmean_point), 
       upper = list(combo = 'box')) 
print(pm) 

Plot produced by code above