假设我想绘制 f(x,y,z) = x^2
使用 scatter3
GNU Octave的函数,我的代码是
x = [1,2,3,4];
y = [1,2,3,4,5];
z = [1,2,3,4,5,6];
for xi = 1:4
for yi = 1:5
for zi = 1:6
a(xi,yi,zi) = x(xi) * x(xi);
endfor
endfor
endfor
[xx yy zz] = meshgrid(x,y,z);
scatter3(xx(:), yy(:), zz(:), [], a(:),'fill');
xlabel('x')
ylabel('y')
zlabel('z')
colormap(rainbow)
colorbar()
我得到的是上面的图,图中显示,函数的变化与 y
其实 y^2
),并且是一个常数w.r.t。x
. 我是不是做错了什么?由于 a(xi,yi,zi) = x(xi) * x(xi)
,我是不是应该得到 a = x^2
相反,由于指数 xi
?
我已经标出了三个轴。
我在Ubuntu 18.04中使用Octave 4.2.2。
交换 x
和 y
函数矩阵中的轴。
a(yi,xi,zi) = x(xi) * x(xi);
这是必要的,因为 meshgrids
在散点图中工作。在你的情况下, x
和 y
轴被翻转为八度。您需要在绘制之前将它们翻转,以获得预期的输出。
从 文件:
表面网格是用阴影矩形绘制的。矩形[x,y]的顶点通常是 meshgrid 的输出。z 决定了每个顶点在平面上的高度,如果只给一个 z 矩阵,则在 meshgrid 上绘制 x = 1:列 (z),y = 1:行 (z)。如果只给定一个z矩阵,那么在meshgrid上绘制x=1:列(z),y=1:行(z)。因此,z的列对应不同的x值,z的行对应不同的y值。
(斜体字的文字特意加亮)