绘图选项:
MATLAB 有许多的绘图选项,以下一一做介绍。如果要将二条曲线划在同一个图,可参考以下的例子:
[code lang="matlab"]
>> x=linspace(0,2*pi,30);
>> y=sin(x); z=cos(x);
>> plot(x,y,x,z) % 将 y=sin(x) 及 z=cos(x) 二函数分布绘图
>> plot(x,y,'g:',x,z,'r--') % 加上不同的颜色及符号来区别二条曲线
[/code]
横轴和数轴的比例控制
axis([xmin xmax ymin ymax]) | 以 xmin xmax 设定横轴的下限及上限,以 ymin ymax 设定纵轴的下限及上限 |
axis auto | 横轴及纵轴依照数据大小的上下限来订定,横轴及纵轴比例是4:3 |
axis square | 横轴及纵轴比例是 1:1 |
axis equal | 将横轴纵轴的尺度比例设成相同值 |
axis xy | 预设值使用卡氏座标即是将图原点设在左下角横轴由左往右增纵轴由下往上递增 |
axis ij | 使用矩阵格式即是将图原点设在左上角横轴不变纵轴由上往下递增 |
axis normal | 以预设值画纵轴及横轴 |
axis off | 将纵轴及横轴取消 |
axis on | 恢复纵轴及横轴 |
上述的各个指令的语法也可以将关键字放在括弧内的单引号之间,如axis(' ')。
子图
要将数个相关的图画在同一页时,可以用subplot这个指令。其语法为 subplot(m,n,p),其中 m, n代表绘图成 m x n 个子图,m表示在 y方向有 m 个图, n表示在 x 方向有 n 个图,p 是代表第几个子图。下例是以 subplot分别画 出线性及对数尺度的四个子图:
[code lang="matlab"]
>> x=[0 2 5 7 10 12 15 17 20 21];
>> y=[0.1 0.2 0.5 0.6 0.9 1 1.2 1.26 1.22 1.2];
>> subplot(2,2,1), plot(x,y) % 画左上角的图
>> subplot(2,2,2), semilogx(x,y) % 画右上角的图
>> subplot(2,2,3), semilogy(x,y) % 画左下角的图
>> subplot(2,2,4), loglog(x,y) % 画右下角的图
[/code]
图形放大和缩小
zoom 指令可以将图形放大或缩小,若要将图形放大时用 zoom on,zoom out,当不再须要放大或缩小图形时用 zoom off。
[code lang="matlab"]
>> M=peaks(25); % peaks 是MATLAB内建的一个像山峰的特别函数,25是这个
>> plot(M) % 函数矩阵的大小,如果数值愈大则画出的山峰图愈平滑
>> zoom on % 开始放大图形,每按一次Enter键图形就放大一次
>> zoom out % 开始缩小图形,每按一次Enter键图形就缩小一次
>> zoom off % 停止图形放大或缩小功能
[/code]
函数分布的快速绘图
fplot的指令可以用来自动的画一个已定义的函数分布图,而无须产生绘图所须要的一组数据做为变数。其语法 为fplot('fun',[xmin xmax ymin ymax]),其中 fun为一已定义的函数名称,例如 sin, cos等等;而 xmin, xmax, ymin, ymax 则是设定绘图横轴及纵轴的下限及上限。以下的例子是将一函数 f(x)=sin(x)/x在-20 x 20,-0.4 y 1.2之间画 出:
[code lang="matlab"]
>> fplot('sin(x)./x',[-20 20 -0.4 1.2])
>> title('Fplot of f(x)=sin(x)/x')
>> xlabel('x'), ylabel('f(x)')
[/code]
其他功能
如果我们须要在所画的图中的曲线的某处加上符号,而又可以随意的放置这些符号,则可以用指令ginput方式 ,它容许我们以滑鼠或上下左右游标在萤幕上输入要加上符号的座标。下面的例子是一个有8个峰顶及峰谷的 函数分布图( y = sin (x) / x ),我们以滑鼠方式将符号加在这些峰值上,藉以突显这些极值,其语法为 [x,y]=ginput(n)。
[code lang="matlab"]
>> x=linspace(-2*pi,2*pi,60);
>> y=sin(x).^2./(x+eps); % 注意加上eps可避免当x趋近零时,y会无法定义
>> plot(x,y)
>> [a,b]=ginput(8); % 依序从萤幕输入8点的座标
>> hold on
>> plot(a,b,'co') % 依据输入的座标值将符号画在图上适当位置
>> hold off
[/code]
三维画图:
plot3 可以用来画一个三维的曲线,它的格式类似 plot ,不过多了 z方向的数据。其与法可以是 plot3(X,Y,Z) 或是 plot3(X,Y,Z,'linetype'),其中的 linetype是设定画线的符号和颜色。下面的例子说明一个三维的曲线图:
[code lang="matlab"]
>> t=0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t)
>> title('Helix'), xlabel('sin(t)', ylabel('cos(t)'), zlabel('t')
>> axis('ij') % 加上这个指令,注意图的y轴及曲线方向改变了
[/code]
曲面与等值线的绘制:
如果要画一个三维的曲面,MATLAB是以meshgrid配合与mesh或surf指令来绘图。先要以meshgrid产生在x-y平面 的二维的网格数据,再以一组z轴的数据对应到这个二维的网格,即可画出三维的曲面。以下的例子可说明上 述的绘图过程。
[code lang="matlab"]
>> x=-7.5:0.5:7.5; y=x; % 先产生x及y二个阵列
>> [X,Y]=meshgrid(x,y); % 再以meshgrid形成二维的网格数据
>> R=sqrt(X.^2+Y.^2)+eps; % 加上eps可避免当R在分母时趋近零时会无法定义
>> Z=sin(R)./R; % 产生z轴的数据
>> mesh(X,Y,Z) % 将z轴的变化值以网格方式画出
>> surf(X,Y,Z) % 将z轴的变化值以曲面方式画出
>> mesh(peaks) % 直接将以定义的peaks函数以网格方式画出
>> title('Mesh plot of peaks')
[/code]
与三维绘图有关的还有等值线图,相关指令为contour,contour3。contour是将等值线图以二维图表示,其语法有 几个方式。一是contour(Z),contour(Z,n),其中Z是一个二维矩阵,而 n为等值线的数目(如果不给即以自动方式 设定)。另一种语法则是将z轴的值对应到指定的x,y轴的值,语法为contour(X,Y,Z),contour(X,Y,Z,n),其中X,Y, Z代表x,y,z轴的数据。contour3则是将等值线以三维图表示,其语法与contour类似,只是将对应的关键字contour 改成contour3,其余部份相同。
以下的例子可以比较contour, contour3图示的不同:
[code lang="matlab"]
>> [X,Y,Z]=peaks; % x,y及z轴的数据由peaks函数定义
>> subplot(2,2,1)
>> contour(Z,20) % 画出peaks的Z轴二维等值线图,20为等值线的数目
>> subplot(2,2,2)
>> contour(X,Y,Z,20) % 画出peaks的二维等值线图,注意x,y轴与上图不同
>> subplot(2,2,3)
>> contour3(Z,20) % 画出peaks的Z轴二维等值线图
>> subplot(2,2,4)
>> contour3(X,Y,Z,20) % 画出peaks的三维等值线图,注意x,y轴与上图不同
[/code]