2014-11-22 96 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