R 将多个二维绘图堆叠到三维绘图中
我想用5个填充的等高线绘制一个3d图,垂直叠加。其他软件也可以,但我需要使用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
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
),但没有更改。