2017-07-23 80 views
1

一些數據的三維可視化這是在我的MATLAB數據矩陣:在MATLAB

a = [43.676289 -79.477386 1 
    43.676370 -79.477107 5 
    43.676517 -79.477375 20 
    43.676417 -79.477509 8 
    43.676129 -79.477278 15]; 

第一列是Y軸,第2欄是X軸線和第三列是我的數據。如何繪製條形圖,並根據MATLAB中每個數據點的數據值(如曲面圖中的colorbar)調整條的顏色?

我添加了一個示例圖,我繪製了另一個數據矩陣。在這個例子中,X,Y和Z是線性的,我可以使用'surf'命令繪製這個圖形,沒有問題。我需要爲上述數據繪製相同的圖形,但XY軸的單位與Z不兼容,這使我困惑不解。

Example graph

只是作爲一個附加的註釋,如果我們小區只有XY平面,結果看起來像下一張圖片:

scatter(a(:,2),a(:,1),'*') 

XY PLANE ONLY

而且,這是一個簡單的例子這可能對擴大它有用:

z = [5  0  2  0 
    0  0  0  0 
    0  0  0  0 
    0  0  0  0]; 
[X,Y] = meshgrid(0:1:3); 
surf(X,Y,Z) 

感謝

+1

如果您向我們展示了工作過的圖中的代碼/數據,這將有所幫助。 – Wolfie

+0

對不起@Wolfie我不知道如何回覆,所以我通過添加更多信息來編輯問題。關於工作的代碼,這是一個簡單的'meshgrid'命令和'衝浪'情節,你可以看到。謝謝 – user8296976

+0

編輯問題是添加更多信息的正確方法。保持代碼格式簡單,只需使用縮進 - 您無法在瀏覽器中運行MATLAB代碼片段! – Wolfie

回答

1

這裏是你可以做的 - 建立Z根據數據矩陣:

a = [43.676289 -79.477386 1 
    43.676370 -79.477107 5 
    43.676517 -79.477375 20 
    43.676417 -79.477509 8 
    43.676129 -79.477278 15]; 
[X,Y] = meshgrid(sort(a(:,2)),sort(a(:,1))); 
Z = zeros(size(X)); 
for k = 1:size(a,1) 
    xind = abs(X-a(k,2))<eps; 
    yind = abs(Y-a(k,1))<eps; 
    Z(xind & yind) = a(k,3); 
end 

鍵入surf(X,Y,Z)會給你這樣的:

enter image description here

不過,我覺得bar3可能是更好的選擇:

b = bar3(sort(a(:,1)),Z); 
xticklabels(sort(a(:,2))); 
cdata_sz = size(b(1).CData); 
z_color = repelem(Z,6,4); 
z_color(abs(z_color)<1) = nan; 
z_color = mat2cell(z_color,... 
    cdata_sz(1),ones(1,size(Z,2))*cdata_sz(2)); 
set(b,{'CData'},z_color.') 
view(-70,30) 

bar3

+0

這太棒了!謝謝@EBH!作爲一個額外的選擇,你是否有任何想法如何將這些點連接在一起形成一個表面?假設我測量幾個點的山的高度,並且我想通過那些少數樣本點來繪製山的模型。我希望我解釋得很好。無論如何感謝您的第一個答案。 – user8296976

+0

@ user8296976歡迎您!如果我的意圖是正確的,那麼這正是'surf'的意思。你爲什麼不好? – EBH

+0

Surf的問題在於,當沒有可用數據時,它會變爲零。但是我想在可用點之間有一個平滑的表面。我有更多的樣本點,我可以創建更精確的模型.... – user8296976