2010-06-25 108 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')。