pfive-pointedstar(pentagram)五角星标记
hsix-pointedstar(hexagram)六角星标记
颜色的定义是:
rred红
ggreen绿
bblue蓝
ccyan兰绿色
mmagenta洋红
yyellow黄
kblack黑
wwhite白
另外,利用线型属性和标记属性可以随心所欲地设计作图图式。
LineWidth定义线的宽度,默认为1
MarkerEdgeColor定义标记的边缘颜色
MarkerFaceColor定义标记面的颜色
MarkerSize定义标记记号的大小
举例1:
t=0:
pi/20:
2*pi;
plot(t,sin(t),'-.r*');%用红色点划线和星号作图
holdon;%保持当前图形不被擦除
plot(sin(t-pi/2),'--bp');%用蓝色虚线和五角星标记作图
plot(sin(t-pi),':
ks');%用黑色虚点线和方框标记作图
holdoff;
结果如图5.2所示(黑白印刷时颜色表现不出来)。
图5.2二维绘图线型和标记的特征控制
(1)
举例2:
t=0:
pi/20:
2*pi;
plot(t,sin(2*t),'-mo',…%线型:
实线,洋红色,小圆标记
'LineWidth',2,…%线宽为2
'MarkerEdgeColor','k',…%标记边缘颜色:
黑色
'MarkerFaceColor',[.491.63],…%标记面颜色:
淡绿
'MarkerSize',12);%标记大小:
12
结果如图5.3所示。
图5.3二维绘图线型和标记的特征控制
(2)
5.1.3图形的标注
图形的标注可以用text函数。
其用法是:
text(x,y,'字符串');text(...'PropertyName',PropertyValue...);
其中,'PropertyName'为字符属性名称,PropertyValue为相应的属性取值。
字符串中若有特殊符号,如希腊字母、箭头等,需要采用LaTeX格式表示。
用doctext_props可以得到详细的用法手册。
对于常用的一些,举例如下:
●改变字符大小。
属性为'FontSize',取值为:
101216…
●改变字符字体。
属性为'FontName',取值为:
'Courier','宋体','黑体'…
●改变字体背景颜色。
属性为'BackgroundColor',取值为:
[R,G,B]和'r','b','k','w'(红,蓝,黑,白)等,参见手册docColorSpec。
命令xlabel,ylabel,title等也可用类似方法修改字体属性。
详见帮助文档。
修改上例为:
X=0:
pi/100:
2*pi;
Y=sin(X);
plot(X,Y,'--r');%用红色虚线作图
gridon;
ylabel('y=sin2\pix','FontSize',14);%Y轴标注,设置了字号
xlabel('x','FontSize',14);%X轴标注,设置了字号
title('functionploty=sin2\pix','FontSize',14);%图标题,设置了字号
text(0.5,sin(0.5),'\leftarrowsin2\pi0.5',...%...为续行号
'FontSize',18,...%字号为18号
'BackgroundColor','w');%背景为白,字符部分将盖住网格线,使字符更清晰
text(2.3,sin(2.3),'\leftarrowsin2\pi2.3','BackgroundColor',[0.80.80.8]);
%'BackgroundColor',[0.70.70.7]使得背景为灰色
结果如图5.4所示。
图5.4修改作图字体属性,线型属性
5.1.4坐标轴的控制方法
Matlab中对作图坐标轴的设置十分灵活,功能十分强大。
用命令docaxes可以获得完整的帮助文档。
与坐标轴设置相关的命令有:
axis,get,set,gca等等。
下面对常用的坐标轴设置作简要介绍。
(1)作图坐标范围设置(axis命令)
axis([xminxmaxyminymax])%用于设置x,y坐标作图范围
axisoff%用于不显示坐标
axison%用于显示坐标(默认)
(2)网格的控制(grid命令等)
gridon%用于显示网格
gridoff%用于不显示网格
set(gca,'XGrid','on')%用于只显示X方向网格
set(gca,'YGrid','on')%用于只显示Y方向网格
set(gca,'GridLineStyle',':
')%用于设置网格的线型,具体如下:
%'-'表示实线;'--'表示虚线;':
'表示虚点线(默认);'-.'表示点划线
(3)坐标轴线型的控制
set(gca,'LineWidth',2)%控制坐标轴线宽度为2(默认为1)
(4)坐标形式的控制
set(gca,'box','on')%用于显示封闭形式的坐标(默认)
set(gca,'box','off')%用于显示开放形式的坐标
(5)坐标刻度方向控制
set(gca,'TickDir','in')%坐标刻度朝内(默认)
set(gca,'TickDir','out')%坐标刻度朝外
(6)坐标颜色控制
set(gca,'Color','y')%坐标面背景颜色设置,本例为:
黄
set(gca,'XColor','k')%设置横坐标轴,刻度,字符的颜色
set(gca,'YColor','r')%设置纵坐标轴,刻度,字符的颜色
(7)坐标刻度字形的控制
set(gca,'FontSize',14)%控制字体大小
set(gca,'FontWeight','bold')%设置字体粗细,有{normal}|bold|light|demi四种
(8)坐标位置和方向控制
set(gca,'XAxisLocation','top')%横坐标轴位于下方(bottom默认)或上方(top)
set(gca,'YAxisLocation','right')%纵坐标轴位于左方(left默认)或右方(right)
set(gca,'XDir','reverse')%横坐标反方向(由右到左为增)
set(gca,'YDir','reverse')%纵坐标反方向(由右到左为增)
(9)坐标刻度线性/对数标度的设置
set(gca,'XScale','log')%横坐标轴位作对数标度
set(gca,'YScale','log')%纵坐标轴位作对数标度
%默认为线性标度'linear'。
%用semilogx()或semilogy(),loglog(),plot()可直接得到对数标度的作图。
(10)坐标刻度数的控制
set(gca,'XTick',[])%横坐标不标度
set(gca,'XTick',[051629])%在横坐标值为0,5,16,29处标度
set(gca,'XTick',[20:
10:
100])%标度从20开始,间隔10标度,直到100
set(gca,'YTick',[])%对纵坐标的标度设置,同上
set(gca,'YTick',[0:
5:
20])
set(gca,'XTickLabel',{'One';'Two';'Three';'Four'})
%将开始的4个刻度依次标记为字符One,Two,Three,Four
%然后循环利用这4个标记将其余刻度全部标完。
set(gca,'YTickLabel',{'One';'Two';'Three';'Four'})
%同上,对纵坐标作标记。
举例1:
JohnG.Proakis著《数字通信》图5.2-4为二元信号的误码概率曲线。
复制如图5.5所示。
其中,两条曲线的计算公式为:
和
函数的定义是:
现在要求用Matlab生成该图,尽可能做到与原图接近。
作图分析:
观察图5.5,在作图时至少需要:
●曲线使用宽度为2的粗实线,颜色为黑;
●手工确定作图坐标范围并手工作出坐标刻度;
●进行标注,注意标注中需要写入公式等特殊字符,需用LaTeX格式;
●网格线需要设定为细实线;
●横坐标表示每比特SNR,用分贝表示,纵坐标是对数刻度的。
图5.5从《数字通信》图5.2-4复制的原图
作图程序如下:
Q=inline('0.5.*erfc(x./sqrt
(2))','x');%Q函数定义
gama_b_dB=0:
0.5:
14;%横坐标范围(分贝)
gama_b=10.^(gama_b_dB./10);%横坐标范围
Pb1=Q(sqrt(gama_b));%曲线1计算
Pb2=Q(sqrt(2*gama_b));%曲线2计算
plot(gama_b_dB,Pb1,'-k',gama_b_dB,Pb2,'-k','LineWidth',2);%作图,线型为黑实线,宽度2像素
set(gca,'YScale','log');%纵坐标轴位作对数标度
axis([01410e-710e-1]);%手工设置作图范围
xlabel('SNRperbit,\gamma_b(dB)','FontSize',12);%横轴标注,并设定标注字号
ylabel('Probabilityoferror,P_b','FontSize',12);%纵轴标注,并设定标注字号
set(gca,'GridLineStyle','-');%用于设置网格的线型为实线
gridon;%开启网格线
set(gca,'MinorGridLineStyle','none');%将对数分格的虚线去掉
set(gca,'XTick',[0:
2:
14]);%在横坐标值为0,2,4...处标度
%下面是在图中写字
text(2.2,5e-3,'\rho_r=-1',...
'FontSize',12,...
'BackgroundColor','w');
text(2,2e-3,'Antipodal',...
'FontSize',12,...
'BackgroundColor','w');
text(2,1e-3,'signals',...
'FontSize',12,...
'BackgroundColor','w');
text(2,0.4e-3,'P_b=Q(\surd2\gamma_b)',...
'FontSize',12,...
'BackgroundColor','w');
text(10,2e-2,'\rho_r=0',...
'FontSize',12,...
'BackgroundColor','w');
text(10,9e-3,'Orthogonal',...
'FontSize',12,...
'BackgroundColor','w');
text(10,4e-3,'signals',...
'FontSize',12,...
'BackgroundColor','w');
text(10,1.5e-3,'P_b=Q(\surd\gamma_b)',...
'FontSize',12,...
'BackgroundColor','w');
结果如图5.6所示。
图5.6用Matlab作出的曲线图,对比图5.5
举例2:
连续信号及其采样后的离散信号的表示。
任务:
以取样函数
为例,作出该函数在
内的波形图像。
f=inline('sin(x)./x','x');%定义波形函数
x=-10:
0.1:
10;%x的计算范围,步进0.1
y=f(x+1e-16);%计算波形,为避免0/0,x加一微小值
plot(x,y,'--k');%用黑色虚线作图(到此看一看作图结果)
axis([-1010-0.31.1]);%到此作图坐标有何变化?
holdon;%保持前图
boxoff;%坐标盒子打开(看一看坐标有何变化?
)
sample_time=-10:
1:
10;%设定离散信号的取样间隔为1
y_sample=f(sample_time+1e-16);%计算离散信号样值
h=stem(sample_time,y_sample,'fill','-k');
%stem的用法与plot相同,专门用于画离散信号的火柴杆图
%stem的用法详见docstem帮助
结果如图5.7所示。
图5.7连续信号与离散信号在同一图中作出,注意boxoff的坐标形式
此外,我们还可以进一步对坐标轴标度进行手工设定。
例如将横坐标标度的字符进行任意设置,接上例,如果继续执行以下两句指令:
set(gca,'XTick',[-10:
2.5:
0,4:
4:
10]);%设定标度位置
set(gca,'XTickLabel',{'-10Ts';'-7.5Ts';'-5Ts';'-2.5Ts';'0';'4Ts';'8Ts'});%设定标度的符号
set(gca,'FontSize',14);%设定坐标标注字号
则获得的结果如图5.8所示。
图5.8连续信号与离散信号在同一图中作出,对坐标标度进行了修改
举例3:
其他常用的特殊二维图形的绘制。
利用bar可以作出二维条形图,stairs可以作二维阶梯图。
其用法与plot类似。
t=0:
1/pi:
2*pi;
plot(t,sin(t),'k','LineWidth',2);
holdon;
stairs(t,sin(t),'r');%阶梯图,注意与plot()所得图的区别
%阶梯图常用来表现取样后零阶保持器的输出波形
bar(t,0.5*sin(t),'m');%条形图,注意正弦波幅度减小了
axis([02*pi-1.11.1]);%坐标范围
则获得的结果如图5.9所示。
图5.9正弦波的plot,stairs,bar作图表达的比较
5.1.5用极坐标作图
利用极坐标作图命令polar可以绘制极坐标表达的函数曲线。
例如绘制方程
和方程
:
theta=0:
0.1:
10*pi;
r=0.001*theta.^2;
polar(theta,r);%作极坐标曲线1并保持
holdon;
t=0:
0.01:
2*pi;
polar(t,sin(2*t).*cos(2*t),'-k');%作极坐标曲线2
得到极坐标图如图5.11所示。
图5.11用命令polar进行极坐标作图
5.2三维图形的绘制
5.2.1三维曲线的绘制
用命令plot3可以进行三维空间曲线的绘制。
plot3的常用格式是:
plot3(X1,Y1,Z1,...)plot3(...,'PropertyName',PropertyValue,...)
详细用法参见docplot3显示的帮助文档。
举例如下,绘制三维曲线:
t=0:
0.01:
15*pi;
x=(10*pi-t).*sin(t);
y=(10*pi-t).*cos(t);
z=t;
plot3(x,y,z,'-k','LineWidth',3);%作图,设定线型
gridon;%看一看,曲线像不像沙发的弹簧?
程序运行结果如图5.12所示。
图5.12三维曲线作图实例
采用命令stem3(x,y,z)可以作出三维火柴杆图。
例如:
t=0:
0.1:
2*pi;
x=(10*pi-t).*sin(t);
y=(10*pi-t).*cos(t);
z=t;
stem3(x,y,z);%作图
gridon;
运行结果为图5.13所示。
图5.13用stem3进行的三维曲线作图实例
5.2.2三维曲面的绘制
Matlab绘制三维曲面的命令有:
(1)mesh(x,y,z)——绘制三维表面网格。
(2)surf(x,y,z)——绘制三维表面图。
这些命令的详细用法请参考帮助文档。
下面举例加以说明。
考虑绘制一个二元函数
为:
其中,绘制范围为
,
。
首先用meshgrid函数产生一个
和
的网格矩阵,即产生一个
轴坐标起始于-3,终止于3,步进为1的;
坐标起始于-2,终止于2,步进为1的网格分割。
其命令是:
>>[x,y]=meshgrid(-3:
1:
3,-2:
1:
2)
x=
-3-2-10123
-3-2-10123
-3-2-10123
-3-2-10123
-3-2-10123
y=
-2-2-2-2-2-2-2
-1-1-1-1-1-1-1
0000000
1111111
2222222
然后将得到的
和
代入
中计算出
。
即
>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y)
z=
0.00000.00000.00270-0.049800.0027
0.00000.00730.14940-0.367900.0027
0.00190.14651.10360-0.367900.0004
0.01370.39831.10360-0.049800.0000
0.01370.14650.14940-0.000900.0000
最后用
mesh(x,y,z);
作出三维表面网格图。
得到结果如图5.14所示。
图5.14用mesh进行的三维表面网格作图实例
为了使得作图更加精细,可以减小生成
,
网格的步进,当然,这是以增加计算量和内存需求为代价的。
即
[x,y]=meshgrid(-3:
0.1:
3,-2:
0.1:
2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,z);
则得到更精细的结果,如图5.15所示。
图5.15更加精细的三维网格作图实例
利用命令
hiddenoff
可以使得网格“透明”,如图5.16所示。
图5.16显示隐含线的网格图
采用surf(x,y,z)代替mesh(x,y,z)后,则可以绘制出三维表面图形。
如图5.17所示。
图5.17三维表面图
如果使用指令meshc、meshz代替mesh指令,即
[x,y]=meshgrid(-3:
0.1:
3,-2:
0.1:
2);z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
figure
(1);
meshc(x,y,z);
figure
(2);
meshz(x,y,z);
则分别作出带等高线图的以及给出零基准平面的三维网格图。
如图5.18所示。
图5.18(a)命令meshc带等高线的三维图(b)命令meshz给出零基准平面的三维图
如果使用指令surfc、surfl代替surf指令,则分别作出带等高线的三维表面图以及具有光照效果的三维表面图。
如图5.19所示。
即
[x,y]=meshgrid(-3:
0.1:
3,-2:
0.1:
2);z=(x.^