x 和 y 轴在 GNU Octave 的 scatter3 图中互换

x and y axis interchanged in scatter3 plot in GNU Octave

假设我想使用 GNU Octave 的 scatter3 函数绘制 f(x,y,z) = x^2。 我的密码是

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。

交换函数矩阵中的 xy 轴。

a(yi,xi,zi) = x(xi) * x(xi);

由于 meshgrids 在散点图中的工作方式,这是必要的。在您的例子中,xy 轴翻转为 Octave。您需要在绘制之前翻转它们以获得预期的输出。

来自documentation

The surface mesh is plotted using shaded rectangles. The vertices of the rectangles [x, y] are typically the output of meshgrid. over a 2-D rectangular region in the x-y plane. z determines the height above the plane of each vertex. If only a single z matrix is given, then it is plotted over the meshgrid x = 1:columns (z), y = 1:rows (z). Thus, columns of z correspond to different x values and rows of z correspond to different y values.

(故意突出显示斜体的文本)