2013-02-05 31 views
15

GGallyファンクションggpairsのカラーパレットを変更したいと思います。 getPlotを使って返されたggplotにggplotコマンドを追加しようとすると、色は変わりません。エラーでggpairs関数の結果にコマンドを直接ggplot入れしようとするとには、ggplotを使ってGGally :: ggpairsのカラーパレットを変更する方法がありますか?

my_pair_plot = ggpairs(dataset, color="var1") 
getPlot(my_pair_plot,2,1) + scale_fill_brewer(palette = "Set2") 

ggpairs(dataset, color="var1") + scale_fill_brewer(palette = "Set2") 

答えて

5

これが可能です。ソースコードを調べる必要がありますが、解決策はかなり容易になります。最初のステップは、我々はすべてのAESを埋めるためのマッピングや色を見つけることができるかどうか見てみましょうちょうど

ggpairs 

であるように、我々は、ggpairs機能に興味を持っています。確かに、

combo_aes <- addAndOverwriteAes(aes_string(x = xColName, 
      y = yColName, ...), section_aes) 

私たちは、それが言うことを望むかもしれません。二つの重要な注意事項:

  • 色とAESはggpairsコール

  • aes_string()のために省略記号に含まれるべきで埋める

を使用しているのは、これを試してみましょう:

ggpairs(diamonds[, 1:2], colour='cut') 

enter image description here

優秀、私たちはほぼそこにいる!カラーパレットをオーバーライドするだけです。あなたはggpairsオブジェクトので

ggpairs(diamonds[, 1:2], colour='cut') + scale_fill_brewer(palette = "Set2") 

が動作しません提案のようなものがggplotないので、+表記がどのような方法で直接適用されないことに注意してください。ただし、簡単な回避策はhereです。

ggplot <- function(...) ggplot2::ggplot(...) + scale_fill_brewer(palette="Set2") 
ggpairs(diamonds[, 1:2], colour='cut') 
...あなたの指を渡り、そして

enter image description here

+1

素敵なハックを!うまくいけば、これは良いことの間信頼できる。 –

5

更新:

GGAllyを再び更新し、この答えでハックははもう動作しませんが、最終的には非があります-hackソリューション:

scales <- scale_colour_brewer(type = 'qual') %+% scale_fill_brewer(type = 'qual') 

を与えられたあなたは(うまくいけば、将来性の方法で)

0を行うことができます
for (row in seq_len(ps$nrow)) 
    for (col in seq_len(ps$ncol)) 
     ps[row, col] <- ps[row, col] + scales 

古い方法

他の答えでハックはもう動作し、それでは、新しいものをハックすることはできません!、プロットオブジェクト内の各文字列を変更する必要がプロットを変更するために

> dta <- data.frame(a=1:6, b=7:12, c=c('f', 'g')) 
> ps <- ggpairs(dta, 1:2, colour = 'c') 
> str(ps) 
List of 10 
$ data  :'data.frame': 2 obs. of 3 variables: 
    ..$ a: int [1:2] 1 2 
    ..$ b: int [1:2] 3 4 
    ..$ c: int [1:2] 5 6 
$ columns  : int [1:3] 1 2 3 
$ plots  :List of 9 
    ..$ : chr "ggally_densityDiag(ggally_data, ggplot2::aes(x = a, colour = c))" 
    ..$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = b, y = a, colour = c))" 

[...] 

$ gg   : NULL 
- attr(*, "class")= chr [1:2] "gg" "ggpairs" 

> ps 

plot before

ggpairs物体の内部構造は、データセットと文字列のリストであります追加のコマンドを含める。このために、我々はdeparse(substitute(argument))を使用するユーザーは、渡されたコードを含む文字列を取得するには、すべてのプロットコールにそれを追加します。

add_to_plots <- function(pairs, modification) { 
    str <- deparse(substitute(modification)) 
    pairs$plots <- lapply(pairs$plots, function(s) paste(s, '+', str)) 
    pairs 
} 

> add_to_plots(ps, scale_colour_brewer(type = 'qual')) 

plot after

+0

これはもう動作しません。私は斜め線の密度プロットを塗りつぶさずにここに示すようにしたいと思います - どうすればいいですか? http://stackoverflow.com/questions/34727408/how-do-i-have-the-density-plot-not-filled-in-ggallyggpairs – Make42

+0

これは色を変更しますが、私のプロットはまだ塗りつぶされていません。 – Make42

+0

これはかなり簡単ですが、塗りつぶしを上書きするだけです。 –

関連する問題