2014-11-22 135 views
1

我刚回到MATLAB,遇到了一些相当基本的绘图问题。我已经搜索mathworks.com ...从3D阵列创建网格图

我有一些3D数组,尺寸200×2×11。给一些上下文,基本上我有11个时间点,并想绘制一些2D线这些中的每一个。

例如,对于时间1(即,myArray(:,:,1)),I可以产生一些2D图,看起来像这样: enter image description here

这是刚刚超过200(X,Y)的内插坐标。

我已经计算了这条线在11个时间段内的演变,并且希望将它绘制在三维中。我试图利用网格函数,它接受参数X,Y,Z。我希望我的时间点在X轴上。我在语法上遇到了一些麻烦。直觉上,我试图得到这样的工作:

for k = 1:11 
    myArray(:,:,k) = [stDev, ret]; 
end 

% mesh(X,Y,Z): 
mesh(1:11, ??, ??) 

真正问题的症结是,我不完全了解一些多维数组的元素转换为格式与网格兼容功能。

谢谢!

+0

能否请您解释一下您的3D阵列的形式。你想如何绘制线条。你有'200x2x11'阵列和11个时间点。所以你想绘制每个'200x2'矩阵。所以每个时间点会有200行。另一种可能性是你有2个'200x11'的矩阵。因此,您可以将第一个矩阵中的点视为“x”坐标,将另一个矩阵中的点视为“y”坐标。你在找哪一个?还是没有一个? – 2014-11-23 00:48:39

+0

@ ParagS.Chandakkar我已经添加了一些细节。让我知道你是否想要更多的澄清。谢谢 – 2014-11-23 00:58:41

回答

0

在数学上,表面被参数化等X = X(U,V)中,Y = Y(U,V)中,Z = Z(U,V),其中u和v是参数。在MATLAB中,矩阵X,Y,Z的参数和垂直和水平索引。在你的情况下,你需要X,Y,Z为200×11矩阵。

在Y和Z的坐标在3D阵列采取:

Y = squeeze(M(:,1,:)); 
Z = squeeze(M(:,2,:)); 

但X应与时间值,即数字从1到你的情况,11来填充。 (一般来说,1:size(M,3))向具有这些值跨越200行复制,使用克罗内克积与
200个的1的矢量:

X = kron(1:size(M,3), ones(size(M,1),1)) 

mesh(X,Y,Z)现在将给出所需的表面。


为了演示目的,我使用了11条曲线,这些曲线都是具有不同比例的平方根曲线。

M = zeros(200,2,11); 
for k=1:11 
    M(:,1,k) = 1:200; 
    M(:,2,k) = sqrt(k*(1:200)); 
end 
X = kron(1:size(M,3), ones(size(M,1),1)); 
Y = squeeze(M(:,1,:)); 
Z = squeeze(M(:,2,:)); 
mesh(X,Y,Z); 

curves