2013-12-08 60 views
3

我有一个数据框我想绘制出来,但它太大了,以至于情节有点混乱,我想逐步构建它以便可视化和比较步骤。如何将数据框的子集逐步添加到ggplot

下面是一些虚拟的数据:

V1<-rnorm(50) 
V2<-rnorm(50) 
V3<-c(rep("A",10),rep("B",10),rep("C",10),rep("D",10),rep("E",10)) 
V4<-V2+.1 
DF<-data.frame(V1,V2,V3,V4) 

我的阴谋代码如下所示:

ggplot(DF,aes(x=V1,y=V2,size=V4,label=DF$V3),legend=FALSE)+ 
scale_y_continuous(limits = c(-3, 3))+ 
scale_x_continuous(limits = c(-3, 3))+ 
geom_point(color="black",fill='red',shape=21)+ 
geom_text(size=2)+theme_bw()+ 
scale_size(range = c(5, 20)) 

其中有我所有的期望美学,但太混乱太关注一下。所以我用字符变量来分解数据框,这将是我感兴趣的变量。

S<-split(DF,DF$V3) 

现在最好我想一个空白的情节开始,然后添加对A的数据,然后B,然后C,d和E逐步所以我可以打印出的每一步。每个绘图都具有相同的美学特征,并从V4中绘制出它们的尺寸,并从V3中绘制出标签。

我尝试添加在层与连续geom_point增加,像这样:

ggplot(DF,aes(x=V1,y=V2,size=V4))+ 
scale_y_continuous(limits = c(-3, 3))+ 
scale_x_continuous(limits = c(-3, 3))+ 
theme_bw()+ 
geom_blank()+ 

geom_point(data=S$"A",color="black",fill='red',shape=21)+ 
aes(label=S$'A')+ 
geom_text(size=2)+ 
scale_size(range=c(5,20))+ 

geom_point(data=S$'B',color="black",fill='red',shape=21)+ 
aes(label=S$'B')+ 
geom_text(size=2)+ 
scale_size(range=c(5,20)) 

,如果我只是离开它的geom_point第一线A和B,但只要我开始添加其中一期工程标签和其他细节,我很快就会收到错误。

回答

3

您可以绘制第一个子集并将其存储为对象。

p<-ggplot(S$A,aes(x=V1,y=V2,size=V4,label=V3),legend=FALSE)+ 
    scale_y_continuous(limits = c(-3, 3))+ 
    scale_x_continuous(limits = c(-3, 3))+ 
    geom_point(color="black",fill='red',shape=21)+ 
    geom_text(size=2)+theme_bw()+ 
    scale_size(range = c(5, 20)) 

然后用%+%来更新你的图。第二个示例中的do.call()用于从列表元素中获取一个数据帧。

#to replace subset A with subset B 
p %+% S$B 

#to replace subset A with first three subsets  
p %+% do.call(rbind,S[1:3])