2014-01-27 3 views
13

Я хотел бы создать ящики с множеством переменных для групп непрерывной x-переменной. Ящики должны быть расположены рядом друг с другом для каждой группы х.ggplot: размещение ящиков с множеством y-переменных для каждой группы непрерывных x

Данные выглядит следующим образом:

require (ggplot2) 
require (plyr) 
library(reshape2) 

set.seed(1234) 
x <- rnorm(100) 
y.1 <- rnorm(100) 
y.2 <- rnorm(100) 
y.3 <- rnorm(100) 
y.4 <- rnorm(100) 

df <- as.data.frame(cbind(x,y.1,y.2,y.3,y.4)) 

который я тогда плавится

dfmelt <- melt(df, measure.vars=2:5)  

facet_wrap, как показано в этом растворе ( Multiple plots by factor in ggplot (facets)) дает мне каждую переменную в отдельном участке, но я хотел бы иметь ящики каждой переменной рядом друг с другом для каждого бункера x на одной диаграмме.

ggplot(dfmelt, aes(value, x, group = round_any(x, 0.5), fill=variable))+ 
geom_boxplot() + 
geom_jitter() + 
facet_wrap(~variable) 

fig1

Это показывает, у-переменных рядом друг с другом, но не бен х.

ggplot(dfmelt) + 
geom_boxplot(aes(x=x,y=value,fill=variable))+ 
facet_grid(~variable) 

fig2

Теперь я хотел бы, чтобы произвести такой сюжет для каждого бина х.

Что нужно изменить или добавить?

+0

Пожалуйста, включите библиотеки, которые вы используете в коде. Также откуда происходит «round_any»? –

+0

@TylerRinker - plyr – jlhoward

+0

@TylerRinker - библиотеки ggplot2 и plyr. – sina

ответ

26

Непонятно, что вы ищете. Это близко?

enter image description here

library(ggplot2) 
library(plyr) 
ggplot(dfmelt, aes(x=factor(round_any(x,0.5)), y=value,fill=variable))+ 
    geom_boxplot()+ 
    facet_grid(.~variable)+ 
    labs(x="X (binned)")+ 
    theme(axis.text.x=element_text(angle=-90, vjust=0.4,hjust=1)) 

EDIT (ответ на комментарий ФП в)

Вы можете поместить на Y рядом друг с другом в каждом бункере, просто вынимая facet_grid(...) вызов, но я не рекомендовать его.

ggplot(dfmelt, aes(x=factor(round_any(x,0.5)), y=value, fill=variable))+ 
    geom_boxplot()+ 
    labs(x="X (binned)")+ 
    theme(axis.text.x=element_text(angle=-90, vjust=0.4,hjust=1)) 

Если вы должны сделать это таким образом, это все еще четче с помощью фасетов:

dfmelt$bin <- factor(round_any(dfmelt$x,0.5)) 
ggplot(dfmelt, aes(x=bin, y=value, fill=variable))+ 
    geom_boxplot()+ 
    facet_grid(.~bin, scales="free")+ 
    labs(x="X (binned)")+ 
    theme(axis.text.x=element_blank()) 

Примечание добавление bin столбца dfmelt. Это связано с тем, что использование factor(round_any(x,0.5)) в формуле facet_grid(...) не работает.

+0

это выглядит лучше, но это не то, что я хочу. Для каждого бункера x я хотел бы иметь соответствующие y-boxplots рядом друг с другом (y1 | y2 | y3 | y4 для x1 и т. Д.). Любые идеи, как это возможно? – sina

+0

Смотрите правки выше ... – jlhoward

+0

отлично, спасибо большое! – sina

 Смежные вопросы

  • Нет связанных вопросов^_^