2014-10-02 3 views
2

Я новичок в ggplot2, я хочу построить прямоугольник из нескольких числовых столбцов в одном и том же графике и сгруппировать блокплоттер по коэффициенту из последнего столбца, заголовок кадра данных выглядит так:ggplot boxplot для нескольких столбцов с коэффициентом

id var1 var2 var3 factor 

Я знаю, что я могу сделать:

ggplot(df,aes(x=factor,y=var1)+geom_boxplot() 

Для каждой переменной.

Как я могу построить их вместе с ggplot2? Базовая графическая утилита boxplot(df[,-c(id,factor)] построит их вместе.

ответ

9

После работы «для построения boxplot нескольких числовых столбцов в том же участке и группу boxplot на фактор ":

mm = melt(df, id=c('id','factor.col')) 
ggplot(mm)+geom_boxplot(aes(x=paste(variable,factor.col,sep="_"), y=value)) 

enter image description here

данных:

> df 
    id   var1  var2  var3 factor.col 
1 1 0.0562941632 1.3055892 -1.7553986   c 
2 2 0.3187487914 -0.6434729 0.7582403   a 
3 3 -1.0120881740 0.3898366 0.4790115   c 
4 4 -0.7576871261 0.9474247 0.2180341   b 
5 5 -0.2895981608 0.2388043 -0.4407693   a 
6 6 0.0005306311 0.9494667 -0.2604795   c 
7 7 0.2022893934 -0.3095420 -1.9483369   c 
8 8 -0.8179580833 -0.7891642 0.7662824   b 
9 9 -0.7553554525 0.2734337 -0.7145471   b 
10 10 0.4206429078 -0.6171774 0.6274320   c 
> 

После также могут быть использованы:

ggplot(mm)+geom_boxplot(aes(x=variable, y=value))+facet_grid(.~factor.col) 

enter image description here

+0

Спасибо! это то, что я хочу. – crazyhottommy

+1

@ crazyhottommy: Но тогда почему вы приняли другой ответ, который не показывает var1, var2 и var3? – rnso

1

При использовании ggplot2 расположение ваших данных должно быть немного по-другому, как вы бы это для базовой графики

#Your sample data... 
df= data.frame(id = 1:10, 
      var1 = rnorm(10), 
      var2 = rnorm(10), 
      var3= rnorm(10), 
      factor.col= LETTERS[1:10] 
) 
# Use the reshape2 package to merge the columns by id and factor.col 
library(reshape2) 
df_long <- melt(df, id=c("id","factor.col")) 
# And now plot the boxplots 
library(ggplot2) 
ggplot(df_long,aes(x=factor.col,y=value)) + geom_boxplot() 
Смежные вопросы