1

我想从一个数据集中绘制多个平行坐标图。目前我有一个工作解决方案,splitl_ply产生 4 个ggplot2对象。我想用更紧凑的布局和一个图例来解决这个facet_wrap问题facet_grid。这可能吗?

使用普通ggplot2对象(箱线图) facet_wrap 可以完美地工作。使用该GGally功能ggparcoord(),我得到了错误Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting

我究竟做错了什么?

require(GGally)
require(ggplot2)
# Example Data
x <- data.frame(var1=rnorm(40,0,1),
                var2=rnorm(40,0,1),
                var3=rnorm(40,0,1),
                type=factor(rep(c("x", "y"), length.out=40)),
                set=factor(rep(c("A","B","C","D"), each=10))
                )
# this works
p1 <- ggplot(x, aes(x=type, y=var1, group=type)) + geom_boxplot()
p1 <- p1 + facet_wrap(~ set)
p1 
# this does not work
p2 <- ggparcoord(x, columns=1:3, groupColumn=4) 
p2 <- p2 + facet_wrap(~ set)
p2 

任何建议表示赞赏!谢谢!

4

1 回答 1

4

您不能直接facet_wrap()与函数一起使用,ggparcoord()因为此函数仅将在调用此函数时指定的那些列用作数据。通过查看 的数据元素可以看出p2。没有名为 的列set

 p2 <- ggparcoord(x, columns=1:3, groupColumn=4)
 head(p2$data)
  type .ID anyMissing variable       value
1    x   1      FALSE     var1  0.95473093
2    y   2      FALSE     var1 -0.05566205
3    x   3      FALSE     var1  2.57548872
4    y   4      FALSE     var1  0.14508261
5    x   5      FALSE     var1 -0.92022584
6    y   6      FALSE     var1 -0.05594902

要获得具有分面的相同类型的图,首先,您需要向现有数据框添加新列(仅包含与案例数相对应的数字),然后重塑此数据框。

x$ID<-1:40
df.x<-melt(x,id.vars=c("set","ID","type"))

然后使用函数ggplot()geom_line()绘制数据。

ggplot(df.x,aes(x=variable,y=value,colour=type,group=ID))+
   geom_line()+facet_wrap(~set)

在此处输入图像描述

于 2013-01-31T12:02:05.420 回答