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