如何在R中对longtable进行子集化并使用ggplot创建箱图

时间:2015-03-02 13:48:06

标签: r plot ggplot2 subset plyr

给出以下示例:

set.seed(1)
tmp.data<-data.frame(group=rep(c("x","y","z"),8),
year=rep(c(2000:2003),6),
value=runif(24, 1, 100)) 

我可以创建一个带有群组隶属关系的简单箱图:

boxplot.example<-ggplot(data=tmp.data)
boxplot.example.simple<-boxplot.example +
geom_boxplot(aes(x=group,y=value))

# plot
boxplot.example.simple

但是,我想在同一图表中为每个组和年份创建单独的Boxplots。

我尝试使用ggplot的组函数:

boxplot.example.yearly<-boxplot.example +
geom_boxplot(aes(x=year,y=value, group=group))

# plot
boxplot.example.yearly # does not work as expected

然而,分组没有按预期工作。

然后我尝试使用splitllply这样:

require("plyr")

boxplot.example.yearly.2<-ggplot() +
llply(.data=split(tmp.data,tmp.data$year),.fun=geom_boxplot,
aes(x=year,y=value))

# Error: ggplot2 doesn't know how to deal with data of class uneval

这可能是因为ggplot函数中未指定data参数。

那么如何将箱形图绘制成一个按group分组的年度观测值和年度观测值?

1 个答案:

答案 0 :(得分:1)

由于您希望在同一图表中为每个组和年份生成箱图,我认为您的数据集已准备就绪,您可以执行以下操作:

p <- ggplot(tmp.data, aes(factor(year), fill=group, value)) 
p + geom_boxplot()

enter image description here