我正在尝试使用 3 维绘制曲面,plot3D
但遇到了问题。我希望你们能帮助或至少为我指明正确的方向。如果这是解决方案,我愿意使用不同的包。
我正在阅读一个包含几十列的制表符分隔的文本文件,每一列都是它自己的变量,每一行都是一个单独的观察结果(我希望这是有道理的)。
假设r_NH4
是我想映射到 x 轴,r_NO3
是 y,removal_N
是z
。
plot3D
如果您的输入是矩阵,则要求 x 和 y 单调递增。我的数据的结构和大小使得对两者都增加排序变得困难(至少我无法弄清楚如何去做)。阅读手册页我了解到列表可用于一次输入x
, y
, z
(不参考顺序)。
我为 plot3d 创建了一个列表来解释:
list.r_conc<-list(x=r_NH4,y=r_NO3,z=removal_N,3)
我尝试在plot3d
.
library(plot3D)
plot3d(list.r_conc,
xlab="x",
ylab="y",
zlab="z",
xlim=c(0,40),
ylim=c(0,40)
)
结果创建了一个rgl
对象,该对象将每个点绘制为散点图,而不是表面。
有没有办法通过在命令中添加一个参数来把它变成一个表面plot3D
?
我的数据是离散的和/或无序的事实是否会阻止绘制表面?
寻找解决方案让我想到了这个问题。尝试遵循解决方案,我尝试了以下脚本:
z=as.matrix(data.frame(r_NH4,r_NO3))
z=matrix(removal_N,ncol=length(r_NH4),nrow=(r_NO3))
persp3d(z=z)
输出是杂乱无章的平面和轴,r_NH4
并且r_NO3
与输入奇怪/不一致(但至少它没有创建散点图!)。
有没有办法同时按x
和y
变量排序,同时保持z
与正确的坐标相关联?
plot3D 甚至能够使用离散值(而不是模型或函数)绘制表面吗?
r_NH4 r_NO3 removal_N
2.220 16.816 1.609
1.734 13.280 4.262
0.000 21.586 -3.240
25.166 3.111 3.479
25.652 2.887 4.708
31.751 3.021 -4.899
17.042 4.868 3.118
23.259 15.917 2.968
23.560 15.773 3.250
24.973 14.533 0.848
25.452 13.973 2.880
21.599 11.528 -4.727
25.243 13.193 0.950
25.049 13.763 -1.134
25.434 14.550 2.152
26.499 15.446 0.606
25.661 15.207 2.449
19.422 10.645 2.350