在MATLAB中在3D空间中绘制矩阵,而不使用网格和冲浪类型的图

时间:2016-03-27 14:25:06

标签: matlab matrix 3d

我不熟悉MATLAB环境,我想以一种方式绘制矩阵,在矩阵中将矩阵的每个单元格显示为一个点。< / p>

例如现在的矩阵&#34; A&#34;在3D空间中具有以下几点: x = 1,y = 1 Z = 10,x = 1,y = 3 Z = 27,直到达到x = 3,y = 3,z = 26。

 A =
    10    15    27
    56    87     2
    90    87    26

我不想使用网格和冲浪。我正在寻找plot3 digram这样的图。我尝试了plot3但它没有正确显示z的值。

i=1:3;
j=1:3;
plot3(i,j,A(i,j))

enter image description here

在上图中;当x = 3且y = 3时,给出3个值,但是它应该表示x = 1,y = 3的这些值; X = 2,Y = 3; X = 3,Y = 3

2 个答案:

答案 0 :(得分:3)

首先,我建议您更改变量名称。我将使用xy代替ij。在许多语言中,这些符号通常用于标量索引而不是完整的向量索引,在Matlab中它们可以具有特殊的意义(它们用于表示复数)。

那就是说,在你的陈述i=1:3;中你只生成3个指数,但你有9个值要在你的矩阵中绘制。这三个指数必须重复(在您的情况下为3次,每列一次)。因此,正确的xy代将是:

%% // Manual mesh/coordinate generation
x = bsxfun(@times,1:size(A,1), ones([size(A,2) 1])) ;
x = x(:) ;

y = bsxfun(@times, ones([1 size(A,1)]) , (1:size(A,2)).' )  ;
y = y(:) ;

有了这个,您可以方便地使用scatter3plot3

hscat = scatter3( x, y, A(:) ) ;
hp3 = plot3( x, y, A(:),'Marker','o','LineStyle','none') ;
%// will both produce exactly the same result

现在请考虑一下这样一个事实,即我生成xy坐标的方式只不过是meshgrid将为您做的事情(或更多维度通用{{1} })。

例如,在下面的代码中,3种绘图方法将产生与上述完全相同的输出,因此请选择:

ndgrid

为什么要在手边有一个轮子重新发明轮子...... %% define a grid [X,Y] = meshgrid( 1:size(A,1) , 1:size(A,2) ) ; %% // surface plot (but only points visible, no line) hsurf = surf(X,Y,A,'Marker','o','LineStyle','none','FaceColor','none') ; %% // scatter3 hscat = scatter3( X(:), Y(:), A(:) ) ; %% // plot3 hp3 = plot3( X(:), Y(:), A(:),'Marker','o','LineStyle','none') ; 用较少的代码指令为你完成工作; - )

答案 1 :(得分:0)

要生成坐标,您应该使用ndgrid(或meshgrid,其交换XY。):

[X, Y] = ndgrid(1:3, 1:3);

plot3会将输入点与一条线连接起来,因此如果您想在图中使用不同的点,请使用scatter3

scatter3(X(:), Y(:), A(:));

(如果你想要这些行,你也可以以相同的方式使用plot3。)