我想为连续x变量的组创建多个变量的箱线图。对于每组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的bin提供每个变量的框图。
ggplot(dfmelt, aes(value, x, group = round_any(x, 0.5), fill=variable))+
geom_boxplot() +
geom_jitter() +
facet_wrap(~variable)
这显示了彼此相邻的y变量,但不是bin x。
ggplot(dfmelt) +
geom_boxplot(aes(x=x,y=value,fill=variable))+
facet_grid(~variable)
现在我想为x的每个bin生成这样的图。
必须更改或添加哪些内容?
答案 0 :(得分:30)
不完全确定您要找的是什么。这很接近吗?
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))
编辑(对OP评论的回应)
只需取出facet_grid(...)
来电即可将每个广告中的Y彼此相邻,但我不建议使用。
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(...)
不起作用。