matlab axis函数_MATLAB二维图形

7.2.5  双坐标图和子图

本小节介绍双坐标图形的绘制方法。另外前面已经有例子涉及了子图的绘制,读者应该有所了解,本小节将详细介绍子图的绘制方法。

1.双坐标图

在实际应用中,常常会提出这样一种需求:把同一自变量的两个不同量纲、不同数量级的函数量的变化绘制在同一张图上。例如希望在同一张图上表现温度、湿度随时间的变化;温度、压力的响应曲线;人口数量、GDP的变化曲线;放大器输入、输出电流变化曲线等。为满足这种需求,MATLAB提供了以下几个命令。

(1)plotyy(X1,Y1,X2,Y2):以左右不同纵轴绘制X1-Y1、X2-Y2两条曲线。

(2)plotyy(X1,Y1,X2,Y2,function):以左右不同纵轴,把X1-Y1、X2-Y2绘制成function指定形式的两条曲线。

(3)plotyy(X1,Y1,X2,Y2,'function1','function2') 以左右不同纵轴,把X1-Y1、X2-Y2绘制成function1、function2指定的不同形式的两条曲线。

(4)[AX,H1,H2] = plotyy(...):函数plotyy将创建的坐标轴句柄保存到返回参数AX中,将绘制的图形对象句柄保存在返回参数H1和H2中。其中,AX(1)中保存的是左侧轴的句柄值,AX(2)中保存的是右侧轴的句柄值。

【例7-12】  双坐标轴绘图示例。

Ex_7_12.m

clear

x = 0:0.01:20;                                %  x坐标

y1 = 200*exp(-0.05*x).*sin(x);             %  Y1

y2 = 0.8*exp(-0.5*x).*sin(10*x);           %  Y2

[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');     %  绘制双坐标轴图形

set(get(AX(1),'Ylabel'),'String','Slow Decay')   %  纵轴标签1

set(get(AX(2),'Ylabel'),'String','Fast Decay') %  纵轴标签2

xlabel('Time (\musec)')                       %  x标签

title('Multiple Decay Rates')                %  图形标题

set(H1,'LineStyle','--')                      %  线形1

set(H2,'LineStyle',':')                       %  线形2

以上代码运行的结果如图7-15所示。

2.子图

MATLAB允许用户在同一个图形窗口内布置几幅独立的子图,具体的调用语法如下。

(1)subplot(m,n,P):使(m x n)幅子图中的第k幅成为当前幅。子图的编号顺序是左上方为第1幅,向右向下依次排序。

(2)subplot('Position',[left bottom width height]):在指定位置上绘制子图,并成为当前图。

【例7-13】  subplot函数调用示例1。

Ex_7_13.m

clf;clear

t=(pi*(0:1000)/1000)';

y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);

subplot(2,2,1),plot(t,y1);axis([0,pi,-1,1])

subplot(2,2,2),plot(t,y2);axis([0,pi,-1,1])

subplot('position',[0.2,0.05,0.6,0.45])

plot(t,y12,'b-',t,[y1,-y1],'r:');axis([0,pi,-1,1])

以上代码运行的结果如图7-16所示。

1ae50e5c37f41f39f297a9867c94482d.png

图7-15  双坐标轴绘图示例

6c7b308bba95fff1d1305c9c09bee5ca.png

图7-16  子图的绘制(1)

【例7-14】  subplot函数调用示例2。

Ex_7_14.m

figure

for i=1:12

    subplot(12,1,i)                    %  子图位置

    plot (sin(1:100)*10^(i-1))       %  绘制图形

    set(gca,'xtick',[],'ytick',[])   %  设置坐标轴

end

set(gca,'xtickMode', 'auto')          % 重新设置最底层子图的x轴

以上代码运行的结果如图7-17所示。

2f6ff29421e574928e722024f6b9a2a5.png

图7-17  字图的绘制(2)

7.2.6  双轴对数图形

在实际中,我们经常需要绘制坐标轴为对数的图形。所谓双轴对数图形,就是指两个坐标轴都是对数坐标,这需要用到loglog函数,其具体调用语法如下。

(1)loglog(Y):如果参数Y为实数向量或矩阵,则根据Y列向量与它们的指数绘制图形。如果Y为复数向量或矩阵,loglog(Y)则等价于loglog(real(Y),imag(Y)),在loglog的其他调用形式中将忽略Y的虚数部分。

(2)loglog(X1,Y1,...,Xn,Yn):根据参数Xn与Yn匹配的数据绘制双轴对数图形。如果只有Xn或Yn为矩阵,则函数将绘制向量对矩阵行或列的图形,行向量的维数等于矩阵的列数,列向量的维数等于矩阵的行数。

(3)loglog(X1,Y1,LineSpec,...):将按顺序分别绘出按3个参数Xi、Yi和LineSpec绘制的对数图形。其中参数LineSpec指明了线条的类型、标记符号和绘制线用的颜色。

(4)loglog(...,'PropertyName',PropertyValue,...):对所有由loglog函数创建的图形对象句柄的属性进行设置。

(5)h = loglog(...):返回值为图形对象句柄向量,一个句柄对应一条直线。

【例7-15】  loglog绘图示例。在区间到之间绘制函数双轴对数图形。

Ex_7_15.m

x = logspace(-1,2);       %  生成50个等对数间距的坐标

loglog(x,exp(x),'-s')

grid on

运行的结果如图7-18所示。

fefc0573d63678fff7fea367a75617f7.png

图7-18  双轴对数图形

7.2.7  特殊二维图形

1.条形图

在MATLAB中使用函数bar和barh来绘制二维条形图,分别绘制纵向和横向图形。这两个函数的用法相同。默认情况下,用bar函数绘制的条形图将矩阵中的每个元素均表示为“条形”,横坐标为矩阵的行数,“条形”的高度表示元素值。其调用语法如下。

(1)bar(Y):对Y绘制条形图。如果Y为矩阵,Y的每一行数据所对应的条形图聚集在一起,座落在相对应的横坐标上。横坐标表示矩阵的行数,纵坐标表示矩阵元素值的大小。

(2)bar(...,width):指定每个条形的相对宽度。条形的默认宽度为0.8。

(3)bar(...,'style'):指定条形的样式。style的取值为grouped或者stacked,默认为grouped。其中,grouped表示绘制的图形共有m组,其中m为矩阵Y的行数,每一组有n个条形,n为矩阵Y的列数,Y的每个元素对应一个条形。stacked表示绘制的图形有m个条形,每个条形为第m行的n个元素的和,每个条形由多个(n个)色彩构成,每个色彩对应相应的元素。

(4)bar(...,'bar_color'):指定绘图的色彩,bar_color的取值与plot绘图的色彩相同。

(5)bar(axes_handles,...),barh(axes_handles,...):在指定的坐标轴上绘制。

【例7-16】  使用bar函数与barh函数绘图示例。

Ex_7_16.m

Y = round(rand(5,3)*10);%随机产生一个5×3矩阵,每个元素为1-10之间的整数

subplot(2,2,1)       %设定绘图区域,在图形对象的左上角绘制

bar(Y,'group')       %绘制纵向条形图

title 'Group'        %添加标题Group

subplot(2,2,2)       %在图形对象的右上角绘制

bar(Y,'stack')

title 'Stack'

subplot(2,2,3)       %在图形对象的左下角绘制

barh(Y,'stack')      %绘制横向条形图

title 'Stack'

subplot(2,2,4)       %在图形对象的右下角绘制

bar(Y,7.5)

title 'Width = 7.5'

运行的结果如图7-19所示。

95dabe7eef86c669f285a58b9bc18666.png

图7-19  条形图示例

2.区域图

区域图在显示向量或是矩阵中的元素在x轴的特定点占所有元素的比例时十分直观。默认情况下,函数area将矩阵中各行的元素集中,将这些值绘成曲线,并填充曲线和x轴之间的空间。其调用语法如下。

(1)area(Y):绘制向量Y或矩阵Y各列的和。

(2)area(X,Y):若X和Y是向量,则以X中的元素为横坐标、Y中元素为纵坐标绘制图像,并且填充线条和x轴之间的空间;如果Y是矩阵,则绘制Y每一列的和。

(3)area(...,basevalue):设置填充的底值,默认为0。

(4)area(...,'PropertyName',PropertyValue,...):对所有由area函数创建的图形对象句柄的属性进行设置。

(5)area(axes_handle,...):在指定的坐标轴上绘制。

(6)h = area(...):返回area图形对象的句柄值。

【例7-17】  area函数调用示例。

本例将Y中的数据绘制成为了区域图。每一列数据在绘制的时候都是在前一列的基础上累加的,即最下面一条折线绘制的是第1列的数据,而第2列与第1列的和是中间折线的数据源,依次类推。如此就可以看出数据中每一列所占的比例。

Ex_7_17.m

Y = [1, 5, 3;

     3, 2, 7;

     1, 5, 3;

     2, 6, 1];

area(Y)

grid on

colormap summer       %  设置颜色

set(gca,'Layer','top')

title 'Stacked Area Plot'      %  图名

运行的结果如图7-20所示。

3ddbda8fc1bcb50441ed3f627bc4a43f.png

图7-20  区域图示例

3.饼形图

在统计学中,经常要使用饼形图来表示各个统计量占总量的份额,饼形图可以显示向量或矩阵中的元素占总体的百分比。在MATLAB中可以使用pie函数来绘制二维饼形图,其调用语法如下。

(1)pie(X):绘制X的饼形图,X的每个元素占有一个扇形,其顺序为从饼形图上方正中开始,逆时针为序,分别为X的每个元素;如果X为矩阵,则按照各列的顺序排列。在绘制时,如果X的元素之和大于1,则按照每个元素所占的百分比绘制;如果元素之和小于1,则按照每个元素的值绘制,绘制出一个不完整的饼形图。

(2)pie(X,explode):参数explode设置相应的扇形偏离整体图形,用于突出显示。explode必须与X具有相同的维数。explode和X的分量对应,若其中有分量不为零,则X中的对应分量将被分离出饼形图。

(3)pie(...,labels):标注图形,labels为字符串元胞数组,元素的个数必须与X的个数相同。

(4)pie(axes_handle,...):在指定的坐标轴上绘制。

(5)h = pie(...):返回pie图形对象的句柄值。

【例7-18】  绘制二维饼形图示例。使用函数pie绘制二维饼形图,并突出向量中的某个元素。

Ex_7_18.m

x = [1 3 0.5 2.5 2];

explode = [0 1 0 0 0];         %  突出显示第2个元素

pie(x,explode)

colormap jet

运行的结果如图7-21所示。

b1955538e425414cd66478b4fc905865.png

图7-21  饼形图示例

4.直方图

直方图用于直观地显示数据的分布情况。在MATLAB中有两个函数可用于绘制直方图:hist和rose,分别用于在直角坐标系和极坐标系中绘制直方图。hist函数的应用更广泛一些,这里只介绍hist函数的用法。关于rose函数,有兴趣的读者可以参阅MATLAB的帮助文档。hist函数的调用语法如下。

(1)n = hist(Y):绘制Y的直方图。

(2)n = hist(Y,x):指定直方图的每个分格,其中x为向量,绘制直方图时,以x的每个元素为中心创建分格。

(3)n = hist(Y,nbins):指定分格的数目。

【例7-19】  hist函数绘制直方图示例。

Ex_7_19.m

x = -4:0.1:4;

y = randn(10000,1);

hist(y,x)

h = findobj(gca,'Type','patch');

set(h,'FaceColor','r','EdgeColor','w')         %  设置边界和填充颜色

以上代码运行的结果如图7-22所示。

5.离散型数据图

在MATLAB中,可以使用函数stem和stairs绘制离散数据,分别生成二维离散图形和二维阶跃图形。stem函数调用语法如下。

(1)stem(Y):绘制Y的数据序列,图形起始于X轴,并在每个数据点处绘制一个小圆圈。

(2)stem(X,Y):按照指定的X绘制数据序列Y。

(3)stem(...,'fill'):指定是否给数据点处的小圆圈着色。

(4)stem(...,LineSpec):设置绘制的线型、标示符号和颜色。

【例7-20】  使用stem函数绘制离散图形。在区间绘制二维离散图形,设置其线型为虚线,并对数据点处着色。

Ex_7_20.m

t = linspace(-2*pi,2*pi,10);   %  创建10个位于-2*pi到2*pi之间的等间隔的数

h = stem(t,cos(t),'fill','--');     %  以'--'绘制离散数据图

set(get(h,'BaseLine'),'LineStyle',':')

set(h,'MarkerFaceColor','red')

以上代码运行的结果如图7-23所示。

2f44889ce1651a104872143ffc8f433c.png

图7-22  直方图示例

39d9a347a0694dfb20f40a78582a8d0b.png

图7-23  离散性数据图示例

stairs函数用来绘制二维阶跃图形,其调用语法如下。

(1)stairs(Y):按照向量Y的元素绘制阶跃图形。

(2)stairs(X,Y):按照指定X对应的向量Y中的元素绘制出阶跃图形,其中X必须为单调递增。

stairs还有其他与stem调用语法相同的语法,这里不再赘述。

【例7-21】  使用stairs函数绘制正弦波的阶跃图形。在区间()绘制正弦波的阶跃图形。

Ex_7_21.m

x = linspace(-2*pi,2*pi,40); %  创建40个位于-2*pi到2*pi之间的等间隔的数

stairs(x,sin(x))                %  绘制正弦曲线的二维阶跃图形

以上代码运行的结果如图7-24所示。

15239f010070b849f48bee7bcb569992.png

图7-24  二维阶跃图形示例

6.方向矢量图和速度矢量图

在MATLAB中可以绘制方向矢量图和速度矢量图,用于绘制这两种矢量图的函数如表7-9所示。

表7-9MATLAB中用于绘制方向矢量图和速度矢量函数

函    数

功    能

compass

罗盘图,绘制极坐标图形中的向量

feather

羽状图,绘制向量,向量起点位于与x轴平行的直线上,长度相等

quive

二维矢量图,绘制二维空间中指定点的方向矢量

在上述函数中,矢量由一个或两个参数指定,指定矢量相对于圆点的x分量和y分量。如果输入一个参数,则将参数视为复数,复数的实部为x分量,虚部为y分量;如果输入两个参数,则分别为向量的x分量和y分量。

compass函数用来绘制罗盘图,其调用语法如下。

(1)compass(U,V):绘制罗盘图,数据的x分量和y分量分别由U和V指定。

(2)compass(Z):绘制罗盘图,数据由Z指定。

(3)compass(...,LineSpec):设置绘制的线型、标示符号和颜色。

(4)compass(axes_handle,...):在指定的坐标轴上绘制。

(5)h = compass(...):绘制罗盘图,并返回图形句柄。

【例7-22】  绘制矩阵的本征值的罗盘图示例。

Ex_7_22.m

Z = eig(randn(20,20));          %  求20×20随机矩阵的本征值

compass(Z)

以上代码运行的结果如图7-25所示。

feather函数用来绘制羽状图,其调用语法如下。

(1)feather(U,V):绘制羽状图,数据的x分量和y分量分别由U和V指定。

(2)fetaher(Z):绘制羽状图,数据由Z指定。

(3)feather(...,LineSpec):设置绘制的线型、标示符号和颜色。

(4)feather(axes_handle,...):在指定的坐标轴上绘制。

(5)h = feather(...):绘制羽状图,并返回图形句柄。

【例7-23】  使用feather函数绘制羽状图示例。

Ex_7_23.m

theta = (-90:10:90)*pi/180;    %  生成数据

r = 2*ones(size(theta));        %  生成与theta相同宽度和高度的矩阵

[u,v] = pol2cart(theta,r);      %  将极坐标数据theta和r转换成直角坐标u,v

feather(u,v);

以上代码运行的结果如图7-26所示。

57cda702168b291ce4946072ff864d1c.png

图7-25  使用compass函数绘制罗盘图示例

50f2d39ece9648d7aa50bd7f1268c829.png

图7-26  使用feather函数绘制羽状图示例

quiver函数用来绘制箭状图或者速度矢量图,其调用语法如下。

(1)quiver(x,y,u,v):绘制矢量图,参数x和y用于指定矢量的位置,u和v用于指定要绘制的矢量。

(2)quiver(u,v):绘制矢量图,矢量的位置为默认值。

(3)quiver(...,scale):自动调整箭头的比例以适合网格,然后用因子scale拉伸箭头。

【例7-24】  绘制函数的梯度图。

梯度方向也就是速度方向,本例使用quiver函数即可达到目的。

Ex_7_24.m

[X,Y] = meshgrid(-2:.2:2);%  生成网格数据

Z = X.*exp(-X.^2 - Y.^2);    %  定义函数Z

[DX,DY] = gradient(Z,.2,.2); %  求Z在X和Y方向的梯度

contour(X,Y,Z)               %  绘制Z的等高线

hold on                      %  打开图形保持

quiver(X,Y,DX,DY)

colormap hsv           %  创建颜色图

hold off                       %  关闭图形保持

以上代码运行的结果如图7-27所示。

a6886bb2e32058f0bb36d55e3b98f33d.png

图7-27  梯度图示例

7.等高线的绘制

等高线用于创建、显示并标注由一个或多个矩阵确定的等值线。MATLAB中提供了一些函数用于绘制等高线,如表7-10所示。

表7-10MATLAB中用于绘制等高线的函数及其功能

函 数 名

功    能

函 数 名

功    能

clabel

使用等值矩阵生成标注,并将标注显示在当前图形

contourc

用于计算由其他等高线函数调用的等值矩阵

contour

显示矩阵Z的二维等高线图

meshc

创建一个匹配有二维等高线图的网格图

contourf

显示矩阵Z的二维等高线图,并在各等高线之间用实体颜色填充

surfc

创建一个匹配有二维等高线图的曲面图

这里只介绍最常用的函数contour,其他函数请读者自行查阅帮助文档。contour函数用于绘制二维等高线图,其调用语法如下。

(1)contour(Z):绘制矩阵Z的等高线,绘制时将Z在x-y平面上插值,等高线数量和数值由系统根据Z自动确定。

(2)contour(Z,n):绘制矩阵Z的等高线,等高线数目为n。

(3)contour(Z,v):绘制矩阵Z的等高线,等高线的值由向量v决定。

(4)contour(X,Y,Z):绘制矩阵Z的等高线,坐标值由矩阵X和Y指定,矩阵X、Y、Z的维数必须相同。

(5)contour(...,LineSpec):利用指定的线型绘制等高线。

(6)[C,h] = contour(...):绘制等高线,并返回等高线矩阵和图形句柄。

【例7-25】  绘制peaks函数的等高线。

peaks函数是系统自带的测试函数。

Ex_7_25.m

Z = peaks;

[C,h] = contour(interp2(Z,4));  %  绘制插值以后的等高线图,插值可以平滑曲线

text_handle = clabel(C,h);   %  等高线标注

set(text_handle,'BackgroundColor',[1 1 .6],...   %  设置颜色

'Edgecolor',[.7 .7 .7])

以上代码运行的结果如图7-28所示。

87ecea63d9b0d6cb9f3c752bfe14ad0b.png

图7-28  peaks函数等高线图

0fd733dbd3a237369740b31b652ad45b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值