6

私はこれらの投稿を見ました GGally::ggpairs 相関係数をプロットするときにグリッド線なしでプロット する ggpairs を使用してこのプロットを作成する

読んだ後、私はこのハックを実装することができましたhttps://github.com/tonytonov/ggally/blob/master/R/gg-plots.rと私のプロットは次のようになります

私の陰謀

これは良い結果だと思いますが、色を変更することはできません。

MWEはこちら

library(ggally)

# load the hack
source("ggally_mod.R") 
# I saved https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r as "ggally_mod.R"
assignInNamespace("ggally_cor", ggally_cor, "GGally")

ggpairs(swiss)

今、私は走りたい

ggpairs(swiss, 
 lower=list(continuous="smooth", wrap=c(colour="blue")),
 diag=list(continuous="bar", wrap=c(colour="blue")))

しかし、色は同じままです。paramsが機能しなくなったので、色を変更する方法はありますか?

4

2 に答える 2

14

wrap正しく 使用していません。詳細については、ビネットを参照してください。また、対角線については、関数を使用する必要がありますbarDiag(ただし、ggpairsこれを伝えるのに非常に役立つエラーが発生します)

あなたの例ではcolour、下のパネルのポイントと下fillのバーのを変更できます

library(GGally)
library(ggplot2)
ggpairs(swiss[1:3], 
        lower=list(continuous=wrap("smooth", colour="blue")),
        diag=list(continuous=wrap("barDiag", fill="blue")))

ただし、スムーズの色はハード コードされているため (「 」を参照ggally_smooth)、その色を変更するには、渡す独自の関数を定義する必要があります。それではここから

my_fn <- function(data, mapping, pts=list(), smt=list(), ...){
              ggplot(data = data, mapping = mapping, ...) + 
                         do.call(geom_point, pts) +
                         do.call(geom_smooth, smt) 
                 }

# Plot 
ggpairs(swiss[1:4], 
        lower = list(continuous = 
                       wrap(my_fn,
                            pts=list(size=2, colour="red"), 
                            smt=list(method="lm", se=F, size=5, colour="blue"))),
                     diag=list(continuous=wrap("barDiag", fill="blue")))

同様の方法で、新しい上部相関関数を定義する方法を次に示します(あなたが持っているものと同様)

cor_fun <- function(data, mapping, method="pearson", ndp=2, sz=5, stars=TRUE, ...){

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

    corr <- cor.test(x, y, method=method)
    est <- corr$estimate
    lb.size <- sz* abs(est) 

    if(stars){
      stars <- c("***", "**", "*", "")[findInterval(corr$p.value, c(0, 0.001, 0.01, 0.05, 1))]
      lbl <- paste0(round(est, ndp), stars)
    }else{
      lbl <- round(est, ndp)
    }

    ggplot(data=data, mapping=mapping) + 
      annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), label=lbl, size=lb.size,...)+
      theme(panel.grid = element_blank())
  }


ggpairs(swiss, 
        lower=list(continuous=wrap("smooth", colour="blue")),
        diag=list(continuous=wrap("barDiag", fill="blue")),
        upper=list(continuous=cor_fun))
于 2016-06-17T21:06:13.210 に答える