【问题标题】:x and y axis interchanged in scatter3 plot in GNU Octavex 和 y 轴在 GNU Octave 中的 scatter3 图中互换
【发布时间】:2020-06-15 17:25:09
【问题描述】:

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

我已经标记了三个轴。

我在 Ubuntu 18.04 中使用 Octave 4.2.2。

【问题讨论】:

  • 啊,您可能需要在 mehsgrid 中交换 x,y 输入
  • @AnderBiguri a(xi,yi,zi) = x(xi) * x(xi),所以我们应该使用a = x^2 而不是a = y^2(在情节中)
  • 是的,要进行绘图,您需要交换 meshgrid(y,x,z)。这是因为 MATLAB/Octave 用作行/列的内容与您命名它们的内容不匹配。
  • 但是,如果 x 和 y 没有相同的编号怎么办。点数?我会更新帖子
  • 没关系,您的绘图不是在“x”轴上绘制变量x,而是在绘制y。因此,您更改网格网格以使其适合绘图。如果您愿意,还可以更改在图中调用 x 和 y 的轴。

标签: plot octave scatter3d


【解决方案1】:

在函数矩阵中交换 xy 轴。

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

这是必要的,因为 meshgrids 在散点图中工作的方式。在您的情况下,xy 轴被翻转到八度。您需要在绘制之前翻转它们以获得预期的输出。

来自documentation

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多