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

Я хотел бы создать boxplots из нескольких переменных для групп непрерывной переменной 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, как показано в этом решении (Множество графиков по коэффициенту ggplot (facets)) дает мне каждую переменную в отдельном сюжете, но я хотел бы иметь прямоугольники каждой переменной рядом друг с другом для каждого бункера x в одном диаграмма.

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

fig1

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

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

fig2

Теперь я хотел бы создать такой график для каждого бункера x.

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

Ответ 1

Не совсем уверен, что вы ищете. Это близко?

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 (ответ на комментарий OP)

Вы можете поместить Y рядом друг с другом в каждом facet_grid(...) просто facet_grid(...) вызов 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(...) не работает.