如何在R中同时给两个图添加点?

3
我正在寻求在三个不同的平行图中添加点的方法。
我有一个窗口中名为s3d1、s3d2和s3d3的三个散点图。
layout(matrix(c(1,2,1,3),2, 2, byrow = TRUE))
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
s3d3<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)

如果我尝试向 s3d1 添加点:
s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red")

这些点将会被分配给s3d3而不是s3d1。我错过了什么吗?
更多信息:我在运行程序时获取数据点。因此,当我获得与特定图形相关的数据时,我需要添加点到每个图形中。
更新:也尝试了par()函数。
par(fig=c(0,0.65,0,1), new=TRUE)
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
par(fig=c(0.7,1,0.5,1), new=TRUE)
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
par(fig=c(0,0.65,0,1), new=TRUE)
s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red")

s3d1$points3d没有向s3d1(甚至也不是s3d2)添加新点。有什么想法吗?

1个回答

2
如果您尝试执行“s3d1 $ points3d”,查看points3d()的源代码,您会发现它只是向假定已经打开的现有绘图中添加点。换句话说,点/绘图不存储在s3d1,2,3对象中,而仅存储用于绘制到不同视图的转换信息。
因此,要完成您正在尝试的操作,您只需使用普通的图形设备命令。例如,dev.new将打开一个新的绘图窗口,dev.set可以在活动的窗口之间切换。您可以执行以下操作:
dev.new(); h1=dev.cur()
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
dev.new(); h2=dev.cur()
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
dev.new(); h3=dev.cur()
s3d3<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20)
dev.set(h1)
s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red")

还可以查看?dev.new获取更多信息。


抱歉,我应该早点告诉你:实际上,我正在使用layout()在单个窗口中绘制所有三个图形。因此,使用dev.new()会打开一个新窗口,这是不可取的。 - 384X21
哦哦哦...感谢澄清!points3d调用使用的是最后绘制的单元格,即右下角的单元格。我认为最好的解决方案是每个周期从头开始绘制。祝你好运! - John Colby
@user1029725 是的,我在需要快速绘制一些图形时,发现layout非常有用。对于更定制化的子图,我一直使用par(mfrow)等方法。 - John Colby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接