2010-06-25 121 views
2

通過運行我寫的以下matlab函數,在圖中交換了x軸和y軸。軸標籤問題

任何人都可以告訴我問題出在哪裏或幫我修復它嗎?預先感謝您的幫助。

function axislabeling(n) 
x=1:1:n; 
y=1:1:n; 

z=zeros(n,n); 

for i=1:n 
    for j=1:n 
     z(i,j)=i; 
    end 
end 
surf(x,y,z(x,y)) 

xlabel('x-axis') 
ylabel('y-axis') 
zlabel('z-axis') 
+0

縮進四個空格的代碼,將其格式化爲代碼(我已經在這裏爲你做了這件事) – 2010-06-25 10:22:52

回答

0

我懷疑問題不在於軸是錯誤標記,而是圖表不符合您的期望。原因是matlab矩陣被訪問(行,列) - 即,(y,x) - 而不是(x,y),因爲你有它。所以當你設置z(i,j)=i時,你會發現錯誤的方向。

+0

walkytalky,那麼如何解決我的代碼中的問題?謝謝。 – user376089 2010-06-25 16:41:56

+0

@ user376089:我不認爲你明白walkytalky在說什麼。這些軸被正確標記 - 它們沒有任何問題。看看並檢查 - z軸顯然是正確的。因此,如果您的座標軸是右手座標系,則必須定義MATLAB如何繪製/標記它們。如果您想繪製不同的功能,則以不同的方式定義功能。 – Doresoom 2010-06-25 19:01:46

+0

@ user376089在這個特定的情況下,你可以平凡地將代碼改爲'z(i,j)= j'。一般來說,您需要更好地掌握矩陣中的什麼位置。 (我並不是故意不屑一顧 - 幾乎每個Matlab用戶都知道在某個時候有這樣的問題。) – walkytalky 2010-06-25 23:09:01

1

我同意@walkytalky對這一個。

出於故障排除的目的,最好使用x~=y來幫助您更清楚地看到事情。

例如:

n=10; 
x=1:n; %# stepsize of 1 is default and need not be specified 
y=x.^2; %# instead of y=1:n to more easily distinguish x and y 
z=repmat(x',1,n) %# use of repmat should be faster than a nested loop 
surf(x,y,z) 
ylabel('y-axis') 
xlabel('x-axis') 
zlabel('z-axis') 

給出,其中x軸和y軸都清楚正確地標註的曲線圖。

+0

Doresoom,我運行了你的代碼,但得到了錯誤信息。你知道如何解決我的代碼中的問題嗎?謝謝! – user376089 2010-06-25 16:43:04

+0

哎呀,我意外地在z定義行中切換n和1。現在應該工作。 – Doresoom 2010-06-25 18:54:44

1

在matlab中,矩陣存儲爲(行,列)格式,但行表示y軸,列表爲x軸。所以,繪圖命令而不是surf(x,y,z)它應該是surf(x,y,z')。