如何解决带有轮廓3d的mfrow3d会擦除以前的绘图
我在用rgl的mfrow3d
和misc3d的contour3d
显示多个3d图形时遇到麻烦。
特别是,绘制新的子图将导致删除所有先前的子图。这是一个简单的示例:
library(rgl)
library(misc3d)
# setup rgl subplots
mfrow3d(1,2)
# step into first subplot
next3d()
# Draw a ball
f <- function(x,y,z)x^2+y^2+z^2
x <- seq(-2,2,len=20)
contour3d(f,4,x,x)
# advance to next subplot
next3d()
# Ball with one corner removed.
contour3d(f,mask = function(x,z) x > 0 | y > 0 | z > 0,screen = list(x = 290,y = -20),color = "red",color2 = "white")
# the first subplot is removed
在对contour3d
的第一次调用中,第一个球在左侧绘制得很好。但是,在第二次调用contour3d
之后,在右边绘制了第二个图,但是删除了第一个图。
我在这里想念什么?我的直觉是我错过了contour3d
的参数,因为mfrow3d
与其他*3d
的绘图功能配合正常,而与contour3d
的配合却很好。
解决方法
与基本图形一样,rgl
图形有两种类型:低级(如绘图点,线条等)和高级(如plot3d
或persp3d
)。默认情况下,高级绘图会先前进到下一帧(通过调用next3d()
),而低级绘图会添加到当前帧。
misc3d::contour3d
函数使用低级命令绘制所有内容,但假定它具有对整个窗口的控制权,因此它不调用next3d()
前进到下一帧,而是调用{{1 }}会清除整个窗口。
要解决此问题,您可以自己调用clear3d()
(仅在第一个绘图之后,您不需要在第一个绘图之前使用它),然后告诉next3d()
添加到场景中。也就是说,像这样更改代码:
contour3d()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。