5.2 二维图形绘制(4)
5.2.12 特殊坐标轴绘图
前几节介绍了基本的二维绘图函数的使用,但其中无论是直角坐标系还是极坐标系,用到的坐标轴的刻度均是线性刻度。但是在很多实际情况中,数据都出现指数型的变化规律,这时如果再用线性刻度来描述曲线,则处于低次幂的部分数据无法清晰地表现出来。当然,利用5.2.9节中提到的双坐标轴绘图,对指数数据进行局部放大,则可以解决这个问题。但是在MATLAB中,还有更加简便的方式。本节介绍3个函数来解决对数数据的问题,分别是semilogx函数、semilogy函数和loglog函数。
1.semilogx函数
semilogx函数的调用格式与plot函数基本相同,此处不再赘述每一个句法的功能。
● semilogx(Y)。
● semilogx(X1,Y1,X2,Y2,…)。
● semilogx(X1,Y1,LineSpec1,X2,Y2,LineSpec2,…)。
● semilogx(…,'PropertyName ',PropertyValue,…)。
在利用semilogx函数绘制图形时,x轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogx函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
例5-20:semilogx函数与plot函数对比示例。
创建M文件并命名为logx.m(同时存为ex5_20.m),利用M文件编辑器在M文件中输入:
clear all x = 10 .^ (0.1 : 0.1 : 4); y = 1 ./ (x + 1000); figure subplot(1,2,1); semilogx(x, y, '+', 'MarkerSize', 5, 'LineWidth', 2); title('y=(x+1000)^{-1}') subplot(1,2,2); plot(x, y, '+', 'MarkerSize', 5, 'LineWidth', 2); title('y=(x+1000)^{-1}')
运行M文件,结果如图5-22所示。
图5-22 logx.m运行结果
2.semilogy函数
semilogy函数的调用格式与semilogx函数相同,在绘制图形时,y轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogy函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
3.loglog函数
loglog函数的调用格式与semilogx函数相同,在绘制图形时,x轴与y轴均采用对数坐标。
例5-21:loglog函数与plot函数对比示例。
创建M文件并命名为logxlogy.m(同时存为ex5_21.m),利用M文件编辑器在M文件中输入:
clear all a = 0.1 : 0.1 : 5; x = log10(a); y = 10 .^ a; figure subplot(1,2,1); loglog(x, y, '+', 'MarkerSize', 5, 'LineWidth', 2); title('lgy = 10^x') subplot(1,2,2); plot(x, y, '+', 'MarkerSize', 5, 'LineWidth', 2); title('lgy = 10^x')
运行M文件,结果如图5-23所示。
图5-23 logxlogy.m运行结果
5.2.13 二维特殊图形函数
在MATLAB中,除了可以通过plot函数等绘制图形,还可以通过一些函数绘制柱状图、饼状图等特殊图形。常见的二维特殊图形函数如表5-14所示。
表5-14 二维特殊图形函数
函数名 |
说明 |
area |
填充绘图 |
bar |
条形图 |
barh |
水平条形图 |
comet |
彗星图 |
errorbar |
误差带图 |
ezplot |
简单绘制函数图 |
ezpolar |
简单绘制极坐标图 |
feather |
矢量图 |
fill |
多边形填充 |
gplot |
拓扑图 |
compass |
与feather功能类似的矢量图 |
fplot |
函数绘制 |
hist |
条形直方图 |
pareto |
Pareto图 |
pie |
饼图 |
plotmatrix |
分散矩阵绘制 |
ribbon |
三维图的二维条状显示 |
scatter |
散点图 |
stem |
离散序列火柴杆状图 |
stairs |
阶梯图 |
rose |
极坐标系下的柱状图 |
quiver |
向量场 |
表5-14中的函数均有不同的调用方法,下面通过示例向读者介绍其中几个常用的函数,其他函数的使用方法可以查阅MATLAB的在线帮助。
1.bar函数
bar函数用于绘制二维垂直条形图,用垂直条形显示向量或矩阵中的值。其调用格式如下。
● bar(y):为每一个y中的元素画一个条状。
● bar(x,y):在指定的横坐标x上画出y,其中x为严格单增的向量。若y为矩阵,则bar把矩阵分解成几个行向量,在指定的横坐标处分别画出。
● bar(...,'bar_color '):“bar_color”定义条的颜色。
● bar(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
例5-22:创建二维垂直条形图示例。
创建M文件并命名为verticalbar.m(同时存为ex5_22.m),利用M文件编辑器在M文件中输入:
clear all y = [75.995 91.972 105.711 123.203 131.669 ... 150.697 179.323 203.212 223.505 249.633 281.422]; figure; bar(y);
运行M文件,结果如图5-24所示。
图5-24 verticalbar.m运行结果
例5-23:二维直方图有两种类型:垂直直方图和水平直方图。而每种类型又有两种表现模式:累计式和分组式。本例选择其中两种加以表现。
创建M文件并命名为ex5_23.m,利用M文件编辑器在M文件中输入:
clear all x = -2 : 2; Y = [6 8 7 4 5;4 8 1 12 0;4 6 21 1 3]; subplot(1,2,1),bar(x', Y', 'stacked') xlabel('x'), ylabel('\Sigma y'), colormap(cool) legend('因素1', '因素2', '因素3') subplot(1,2,2),barh(x', Y', 'grouped') xlabel('y'), ylabel('x')
运行M文件,结果如图5-25所示。
图5-25 垂直直方图和水平直方图运行结果
2.pie函数
pie函数用于绘制饼图,其调用格式如下。
● pie(x):绘制参数x的饼图。
● pie(x,explode):explode是与x同维的矩阵,若其中有非零元素,则x矩阵中相应位置的元素在饼图中对应的扇形将向外移出一些,加以突出。
● pie(...,labels):labels用于定义相应块的标签。
● pie(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
● h=pie(...):返回绘制的饼图相关的句柄。
例5-24:创建二维饼图和三维饼图示例。
创建M文件并命名为ex5_24.m,利用M文件编辑器在M文件中输入:
clear all x = [1 5 0.5 3.5 2]; explode = [0 1 0 1 0]; subplot(1,2,1) pie(x, explode) colormap jet title('二维饼图') subplot(1,2,2) pie3(x, explode) colormap hsv title('三维饼图')
运行M文件,结果如图5-26所示。
图5-26 二维饼图和三维饼图程序运行结果
3.hist函数
hist函数用于绘制条形直方图,可以显示出数据的分布情况。所有向量y中的元素或者矩阵Y的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示。条形直方图中的x轴反映了数据y中元素数值的范围,直方图的y轴显示出参量y中的元素落入该组的数目。其调用格式如下。
● n=hist(y):把向量y中的元素放入等距的10个条形中,且返回每一个条形中的元素个数。若y为矩阵,则该命令按列对y进行处理。
● n=hist(y,x):参量x为向量,把y中元素放到m(m=length(x))个由x中元素指定的位置为中心的条形中。
● n=hist(y,nbins):参量nbins为标量,用于指定条形的数目。
● [n,xout]=hist(...):返回向量n与包含频率计数与条形的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图。
● hist(...):生成直方图,但不产生输出。
● hist(axes_handle,...):将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中。
例5-25:绘制直方图示例。
创建M文件并命名为ex5_25.m,利用M文件编辑器在M文件中输入:
clear all x = -4 : 0.1 : 4; y = randn(5000, 1); hist(y, x) title('直方图')
运行M文件,结果如图5-27所示。
图5-27 直方图程序运行结果
4.scatter函数
scatter函数用于绘制散点图,其调用格式如下。
● scatter(x,y):以x、y的值为横、纵坐标,绘制散点图。
例5-26:绘制散点图示例。
创建M文件并命名为ex5_26.m,利用M文件编辑器在M文件中输入:
clear all; figure; x = [1 5 6 7 9 5 1 3 12 20]; y = [20 15 6 3 1 5 3 0 1 5]; subplot(1,2,1); scatter(x, y); subplot(1,2,2); scatter(x, y, 'r', 'fill');
运行M文件,结果如图5-28所示。
图5-28 散点图程序运行结果