我有一个我想要绘制的数据框,但是它太大了以至于情节有点令人困惑,我想逐步构建它以便可视化和比较这些步骤。
这是一些虚拟数据:
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))
如果我将它留在A和B的geom_point的第一行,哪个有效,但是一旦我开始添加标签和其他细节,我很快就会出错。
答案 0 :(得分: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])