2017-08-14 16 views
0

私は以下のようなデータフレームをdfとしています。それぞれの要素について、その要素を最終スコアと比較するボックスプロットを作成したいと思います。ループがなければ、以下のコードのようになります。実際には、これを40列分行い、グリッドに表示したいと思います。いくつかの種類の列をルーピングすることはここでは適切だと思われますが、その方法はわかりません。各列の個別のプロットを作成する

library(ggplot2) 
library(gridExtra) 

scores <- c(97, 98, 90, 92) 
factor1 <- c(1, 0, 0, 1) 
factor2 <- c(2, 1, 2, 0) 
factor3 <- c(0, 0, 0, 1) 

df <- data.frame(scores, factor1, factor2, factor3) 

plot1 <- ggplot(df, aes(x=factor(factor1), y=scores)) + geom_boxplot() 
plot2 <- ggplot(df, aes(x=factor(factor2), y=scores)) + geom_boxplot() 
plot3 <- ggplot(df, aes(x=factor(factor3), y=scores)) + geom_boxplot() 
grid.arrange(plot1, plot2, plot3, ncol=2) 
+1

あなたはそれが最も簡単です、形を整えファセットことができます。さもなければ '?aes_string'を見てください。 – Axeman

答えて

1
library(ggplot2) 
library(gridExtra) 

df <- data.frame(scores=c(97, 98, 90, 92), factor1=c(1, 0, 0, 1), 
       factor2=c(2, 1, 2, 0), factor3=c(0, 0, 0, 1)) 

fun <- function(x) { 
    dts <- df[,c("scores",x)] 
    names(dts)[2] <- "varx" 
    p <- ggplot(dts, aes(x=factor(varx), y=scores)) + geom_boxplot() + xlab(x) 
    return(p) 
} 

ps <- lapply(names(df)[-1], fun) 
grid.arrange(grobs=ps, ncol=2) 

enter image description here

+0

まさに私が探していたものです。ありがとう –

+0

簡単な質問の1つ:x軸を実際の列名に変更するにはどうすればよいですか? –

+0

入手しました。ありがとうございました。 'df'に' names'を追加すると何ができますか? –

関連する問題