Plot x轴和y轴在GNU倍频程的散射图3中互换

Plot x轴和y轴在GNU倍频程的散射图3中互换,plot,octave,scatter3d,Plot,Octave,Scatter3d,假设我想使用GNU倍频程的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

假设我想使用GNU倍频程的
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)
,由于索引
xi
,我不应该得到
a=x^2

我已经给这三个轴贴上了标签


我正在Ubuntu 18.04中使用Octave 4.2.2。

在函数矩阵中交换
x
y

a(yi,xi,zi) = x(xi) * x(xi);
这是必要的,因为
meshgrids
在散点图中的工作方式。在您的例子中,
x
y
轴翻转到八度。您需要在绘图之前翻转它们以获得预期的输出

从:

使用着色矩形绘制曲面网格。矩形[x,y]的顶点通常是meshgrid的输出。在x-y平面中的二维矩形区域上。z确定每个顶点平面上方的高度。如果只给出一个z矩阵,则将其绘制在网格x=1:列(z),y=1:行(z)上。因此,z列对应于不同的x值,z行对应于不同的y值


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

Ah,我想您可能需要在mehsgrid@AnderBiguri
a(xi,yi,zi)=x(xi)*x(xi)
,因此我们应该使用
a=x^2
而不是
a=y^2
(在绘图中)是的,对于绘图,您需要交换
网格(y,x,z)
。这是因为MATLAB/Octave用作行/列的内容与您命名的内容不匹配。但是,如果x和y的点数不相同,该怎么办?我将更新posit不要紧,您的绘图没有在“x”轴上绘制变量
x
,其绘图
y
。因此,可以更改网格网格以使其适合于绘图。如果预先输入,还可以更改在绘图中调用x和y的轴。