2016-10-17 4 views
2

現在、特定のプロットを作成する関数を作成中です。プロットはグループ固有の相対平均偏差(それぞれのエフェクトサイズ)を壮大なサンプル平均と比較し、グループごとの全体平均偏差を水平線として示します。私は既にプロット内のグループのために異なる色を得る方法を研究しましたが、グループ固有の色で色を付けることはできません。ここでカットオフラインに因子別の色を追加するR

は、いくつかの例のデータです:

a <- c(runif(10)) 
names(a) <- c(paste0("v", 1:10)) 
b <- c(runif(10)) 
names(b) <- c(paste0("v", 1:10)) 
c <- c(runif(10)) 
names(c) <- c(paste0("v", 1:10)) 

dev_list <- list(a,b,c) 
names(dev_list) <- c("group1", "group2", "group3") 

まず、私はデータを溶かす:

require(reshape2) 
df_aux <- data.frame(matrix(unlist(dev_list), nrow=length(dev_list), byrow=T), class = c(names(dev_list))) 
colnames(df_aux) <- c(c(paste0("v", 1:10)), "class") 
df_melt <- melt(df_aux) 

私は、カットラインのためのデータフレームを作成します。

ml_list <- mapply(function(A, B) { 
    list(data.frame(x = c(-Inf, Inf), y = mean(A), cutoff = factor(paste(B, "Mean Deviation", sep = " ")))) 
}, dev_list, c(names(dev_list))) 

それから私プロットデータ:

require(ggplot2) 
p <- ggplot(df_melt, aes(variable, value)) + geom_point(aes(colour = class)) 

これまでのところ、行を挿入するときに、行の色を定義するためのクラス変数を再度参照する方法がわかりません。私のコードは、これまで:

p <- p + lapply(ml_list, function(z) {geom_line(aes(x,y, linetype = cutoff), z)}) 

プロットpは、その後、次のようになります

Link to the plot as apparently I cannot include it in the post yet

私はすでにgeom_lineのAES内の同じcolour = classを入れて試してみたが、それはしませんでした作業。私はまた、How to assign colors to categorical variables in ggplot2 that have stable mapping?で説明されているいくつかのテクニックを使用しようとしましたが、どちらも動作できませんでした。

私の最後のコード行がプロットと同じ方法でクラス変数の色を使用するように、誰でも正しい色指定を教えてもらえますか?

ありがとうございます!

編集:これ以外の誰かがこれを必要とする場合:Brandonsソリューションを使用するには、上記のml_listに色定義変数を含める必要があります。

新しいコード行:

ml_list <- mapply(function(A, B) { 
    list(data.frame(x = c(-Inf, Inf), y = mean(A), cutoff = factor(paste(B, "Mean Deviation", sep = " ")), class = factor(paste0(B)))) 
    }, dev_list, c(names(dev_list))) 

答えて

1

私はトリックがdata.frameとして物事を維持することだと思います。あなたもこのプロットのために必要な、私が思うに、と

ml_list <- unique(do.call(rbind, ml_list)[-1]) 

p <- ggplot(df_melt, aes(variable, value)) + geom_point(aes(colour = class)) 
p + geom_hline(aes(yintercept=y, linetype = cutoff, color = cutoff), ml_list) + 
    scale_color_discrete(breaks = df_melt$class) 

scale_color_discrete()力、プレゼンテーションの設定*各適用で色を設定しなければならないとして個別にレイヤーを追加すると少し痛いです。

+0

これは完全に機能します。どうもありがとう! – LAP

+0

私はそれが私の問題を解決しないことに気づいたので、これを再度開く必要があります。線の色は、対応する点の色に適合しません。 – LAP

+0

'scale_color_discrete(value = c(" my "、" list "、" of "、" colors "))に色を追加する' –

関連する問題