R 将多个二维绘图堆叠到三维绘图中

R 将多个二维绘图堆叠到三维绘图中,r,plot,3d,rgl,R,Plot,3d,Rgl,我想用5个填充的等高线绘制一个3d图,垂直叠加。其他软件也可以,但我需要使用R。我想更确切地说,这是一个4d图 绘图应具有与下面代码相同的色阶和侧边下方的图例栏 这里提供了我想要的绘图类型的复杂示例 到目前为止,我的代码如下所示: varx=seq(-250, 250, 25) vary=seq(-250, 250, 25) # Import data from csv file var1=read.csv("~/100.csv", header=F) var2=read.csv("~/20

我想用5个填充的等高线绘制一个3d图,垂直叠加。其他软件也可以,但我需要使用
R
。我想更确切地说,这是一个4d图

绘图应具有与下面代码相同的色阶和侧边下方的图例栏

这里提供了我想要的绘图类型的复杂示例

到目前为止,我的代码如下所示:

varx=seq(-250, 250, 25)
vary=seq(-250, 250, 25)

# Import data from csv file
var1=read.csv("~/100.csv", header=F)
var2=read.csv("~/200.csv", header=F)
var3=read.csv("~/300.csv", header=F)
var4=read.csv("~/400.csv", header=F)
var5=read.csv("~/500.csv", header=F)

# Plot filled contour for z1
filled.contour(varx, vary, varz1, nlevels=25, color.palette=heat.colors, xlab="Arbitrary distance", ylab="Arbitrary distance", las=T, key.title=title(main="Intensity"), main="Intensity \nas a function of distance")
我知道我可以在3D中绘制变量
varz1
,但本质上这没有什么不同,因为第三维度和颜色维度是相同的

 library("plot3D")
 persp3D(x=varx, y=vary, z=varz1, clab = "Energy \nIntensity", bty="b2", xlab="Arbitrary X distance", ylab="Arbitrary Y distance", zlab="Z distance (mm)", theta=35, phi=20, ticktype = "detailed", main="Energy intensity \nas a function of distance")
有人有什么想法吗

TANGENT:我对R比较陌生,还没有弄清楚如何为我导入的5个变量迭代
filled.contour
命令。我相信有办法

编辑:示例代码

 x1=seq(2, 10, 2)
 y1=seq(2, 10, 2)
 z1=matrix(c(0,1,2,1,0,1,2,3,2,1,2,3,4,3,2,1,2,3,2,1,0,1,2,1,0), nrow=5, byrow=T)
 z2=z1^2/3
 z3=z1^3/10

 library(rgl)
 open3d()
 bg3d("white")
 elv=0
 offs=2*elv+1
 nbcol=25
 color=rev(rainbow(nbcol, start = 0/6, end = 4/6))
 zcol=cut(z3, nbcol)
 persp3d(x=x1, y=y1, z=elv*z1+0*offs, col=color[zcol], add=T, axes=F, alpha=0.7,theta=50, phi=25, expand=1);
 persp3d(x=x1, y=y1, z=elv*z2+10*offs, col=color[zcol], add=T, axes=T, alpha=0.7);
 persp3d(x=x1, y=y1, z=elv*z3+20*offs, col=color[zcol], add=T, axes=F, alpha=0.7)
您可以看到,绘图的每个级别上的颜色轮廓都是相同的,但它们不应该是相同的。我不知道该怎么改变这个


抱歉耽误了我们的时间。感谢您的投入

您可以在
库(plot3D)中尝试一些东西;persp3D(z=火山,zlim=c(最小(火山),最大(火山)*3),θ=30,φ=30);persp3D(z=volcano+max(volcano)*1.5,add=T,axes=F,colkey=F)
->关于切线:读取数据,而不仅仅是顺序命名的变量。然后,使用
for
循环可以很容易地对其进行迭代,而使用
lappy
LukeA则更容易。这就是我一直在寻找的解决方案,谢谢!然而,这段代码似乎将相同的数据(比如varz1)绘制了5次(即varz2,*z3…中的数据被忽略)。我认为这不应该发生…@Magiclamarshmallow是的,卢克的代码只是把火山数据翻译过来。你可能不会在每一层都有相同的数据,但会像卢克的代码一样在z方向上转换它。@Gregor是的,这是正确的-在z方向上有不同的数据,但当我绘制它时,它是一样的。尝试使用相同的结构,但使用不同的命令(
library(“rgl”),surface3d
),但没有更改。