一.坐标系与坐标轴
1.坐标系的调整:
注意,一般情况下,matlab会根据要绘制的曲线数据范围自动选择合适的坐标系,因此用户不必自己选择绘图坐标系,但是,如果用户觉得自动选择的坐标不合适,可以利用axis()函数来选择新的坐标系;
调用格式:axis(xmin,xmax,ymin,ymax,zmin,zmax),注意:输入的参数可以是4个,也可以是6个,(相应的最小值一定要小于最大值)
2.坐标轴控制:
axis命令用于控制坐标轴的长度,刻度,显示等特征,调用有多种格式;
不再一一赘述:
如下演示坐标系与坐标转换:
3.图形注释:
MATLAB中提供了一些图形标注函数,为图形添加标题,为坐标轴添加标注,为图形添加图例,把说明注释文本放在图形的任何位置;
1)填充图形:
fill函数用于填充二维封闭多边形
调用格式:fill(x,y,‘color’)
说明:在由数据所构成的多边形之中,用所指定的颜色填充,
例:绘制正弦图形:
2)注释图形标题和轴名称:
title命令用于给对象加标题
对坐标轴进行标注,相应的命令是xlable和ylable,zlable,作用分别是对x轴,y轴,z轴进行标注,调用格式是相似的:
给绘制的图形进行详细的标注时,常用的命令是text, gtext命令,均可以在图形的具体部位进行标注,
4.text命令:
此部分很重要,用到再说:
示例:画出正弦函数的图像,标注
5.gtext命令:
可以让鼠标在图形的任意位置进行标注,当光标进入图形窗口时,会变形成一个大十字架形,等待用户的操作,
调用格式:gtext(‘string’,‘property’,propertyvalue…)
6.图例标注:
当在一幅图之中出现多条曲线时,用户可以根据自己的需要,利用legend命令对不同的图例进行说明
也十分重要,用到了再说就好:
注意:绘图函数是完整的一串,一串搞完之后才能输入分号结束,不然是会出现问题的,注意MATLAB之中所有的符号都应该是英文输入法之下的,只有字符串之中可能输入中文,
>> clear
x=linspace(0,2*pi,100);
y1=sin(x);
y2=x/2;
y3=cos(x);
plot(x,y1,'-r',x,y2,'+b',x,y3,'*g')
title('图例标注函数')
xlabel('xvalue'),ylabel('yvalue')
axis([0,7,-2,3])
legend('sin(x)','x/2','cos(x)');
7.分割线控制:
为了使图像的可读性增强,我们使用grid命令给二维或者三维图形的坐标面增加分割线,
也有很多种不同的调用格式:
clear
>> x=linspace(0,2*pi,100);
y1=sin(x);
y2=cos(x);
h=plot(x,y1,'-r',x,y2,'.k');
title('格线控制')
legend(h,'sin(x)','cos(x)')
grid on
二.特殊图形:
为了满足用户的各种需求,MATLAB还提供了绘制条形图,饼图,阶梯图,火柴图,等很多特殊的图形,
1.条形图:
分为二维和三维的情况,
1)绘制二维:bar(竖直条形图),barh(水平条形图);
2)三维:bar3(竖直条形图),bar3h(水平条形图);
2.绘制面积图:
面积图在实际应用之中可以表现不同部分对整体的影响,绘图命令是area
3.绘制饼图:
饼图用来显示向量或者矩阵之中个元素所占的比例,将统计数据可视化,
1)二维绘图命令是pic,
2)三维绘图命令是pic3
二者调用格式十分相似:
%绘制条形图
Y=[45 6 8;7 4 7;6 25 4;7 5 8;9 9 4;2 6 8];
subplot(2,2,1)
bar(Y)
title('图1')
subplot(2,2,2)
bar3(Y),title('图2')
subplot(2,2,3)
bar(Y,2.5)
title('图3')
subplot(2,2,4)
bar(Y,'stack'),title('图4')
>> %绘制面积图
area(Y)
grid on
colormap summer
set(gca,'layer','top')
title('面积图')
>>
注意:上面代码中有这样一行很关键:
set(gca,'layer','top')
我们有必要看看程序之中没有这行代码会怎么样:
两个图对比,不难发现,作用就是使网格子置于顶层,不会被覆盖:
4.柱状图:
柱状图是数据分析之中用的很多的一类图,绘制命令有两条:
1)hist命令:用于绘制直角坐标系下的柱状图;
2)rose命令:用于绘制极坐标系下的柱状图;
两者都有各自的调用格式,不在赘述:
绘制饼图:
X=[528 701 658 780];
subplot(2,2,1)
bar(X)
title('二维条形图')
subplot(2,2,2)
bar3(X),title('三维条形图')
subplot(2,2,3)
pie(X)
title('二维饼图')
subplot(2,2,4)
explode=[0 0 0 1];
pie3(X,explode)
title('三维分离饼图')
绘制柱状图
%指定的若干个相同的柱状图
close all
Y=randn(10000,1);
subplot(1,2,1)
hist(Y)
title('高斯分布柱状图')
x=-3:0.1:3;
subplot(1,2,2)
hist(Y,x)
h=findobj(gca,'Type','patch');
set(h,'FaceColor','r') %改变柱状图的颜色为红色
title('指定范围的高斯分布柱状图')
Y=randn(10000,1);
>> theta=Y*pi;
>> rose(theta);
>> title('极坐标系下的柱状图');
三.离散数据图形:
1.误差棒图
绘图命令是errorbar
也存在很多不同的调用格式
示例:两个场生产零件,尺寸测量如下,
close all
x=[93.3 92.1 94.7 90.1 95.6 90.0 94.7];
y=[95.6 94.9 96.2 95.1 95.8 96.3 94.1];
e=abs(x-y);
errorbar(y,e)
title('误差棒图')
要能读懂:
e=abs(x-y);
errorbar(y,e)
横向显示的是y的每一个元素编号,第1个,第2个,等等,都是编号,
误差棒的中点对应纵轴就是y的每一个元素具体值,误差棒的下方或者上方总有一个值对应x的相应位置的元素,误差棒的总长度就是二倍的误差值,误差棒的一半才是真正的误差。
2.火柴杆图:
用线条表示数据点与x轴的距离,用一小圆圈或者其他指定的符号与线条项链,就是火柴杆图,
1)二维条件下的调用指令是stem,
2)三维条件下的调用指令是stem3,
close all
t=-2*pi:pi/20:2*pi;
x=exp(cos(t));
y=exp(sin(t));
z=exp(-t);
stem3(x,y,z,'fill','r')
title('三维火柴杆图')
3.阶梯图:
绘图命令是stairs
close all
x=-2:0.1:2;
y=exp(x);
stairs(x,y)
hold on
plot(x,y,'--*')
hold off
text(-0.8,2,'幂函数的阶梯图','FontSize',14)
四.向量图形:
由于物理等学科的需要,在实际中有时会需要绘制一些带方向的图形,即向量图,MATLAB中也可以解决这个需求
1.罗盘图:
罗盘图即为起点为坐标原点的二维或者三维向量,同时还会有分割线显示,
绘图命令是compass,调用格式有很多
2.羽毛图:
在横坐标上等距地显示向量的图形,看起来就像鸟的羽毛一样,绘制的命令是feather,调用格式也有很多。
close all
x=-pi:pi/10:pi;
y=sin(x);
subplot(1,2,1)
compass(x,y)
title('罗盘图')
subplot(1,2,2)
feather(x,y)
title('羽毛图')
3.箭头图:
箭头的方向即为向量的方向,箭头的长短代表向量的大小,
1)quiver绘制二维图形;
2)quiver3绘制三维图形;
close all
x=-2:0.25:2;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.*exp(-X.^2-Y.^2);
[U,V]=gradient(Z,2,2);
contour(X,Y,Z)
hold on
quiver(X,Y,U,V)
hold off
axis image
综合示例:
对某部门的工资情况进行分类汇总,结合教材第145页;
步骤1)创建统计工资对应的矩形
clear
>> %创建统计工资对应的矩形
jb=[800;685;685;613;800;613;800;685;613;613;800;685;613;613;685;613] %基本工资统计
jb =
800
685
685
613
800
613
800
685
613
613
800
685
613
613
685
613
>> jj=[700;700;600;600;700;700;700;700;600;600;700;600;600;600;700;600]; %奖金统计
zf=[130;100;100;100;130;100;130;100;100;100;130;100;100;100;130;100]; %住房基金统计
bx=100*ones(16) ;
bx=bx(:,1) %保险统计
bx =
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
>> SF=jb+jj+zf+bx %实发工资结果
SF =
1730
1585
1485
1413
1730
1513
1730
1585
1413
1413
1730
1485
1413
1413
1615
1413
>> Z=[jb jj zf bx SF] %工资清单统计结果
Z =
800 700 130 100 1730
685 700 100 100 1585
685 600 100 100 1485
613 600 100 100 1413
800 700 130 100 1730
613 700 100 100 1513
800 700 130 100 1730
685 700 100 100 1585
613 600 100 100 1413
613 600 100 100 1413
800 700 130 100 1730
685 600 100 100 1485
613 600 100 100 1413
613 600 100 100 1413
685 700 130 100 1615
613 600 100 100 1413
>>
步骤2)绘制条形图:
%绘制条形图
subplot(2,3,1)
bar(Z)
title('二维条形图')
subplot(2,3,2)
bar3(Z),title('三维条形图')
步骤3)绘制面积图:
%绘制饼形图
subplot(2,3,3)
area(Z)
grid on
colormap summer
set(gca,'layer','top')
title('面积图')
步骤4)对工资多少进行排序:
%对工资多少进行排序
max(Z) %求最大值
ans =
800 700 130 100 1730
sort(Z) %从小到大排列工资单
ans =
613 600 100 100 1413
613 600 100 100 1413
613 600 100 100 1413
613 600 100 100 1413
613 600 100 100 1413
613 600 100 100 1413
613 600 100 100 1485
685 600 100 100 1485
685 700 100 100 1513
685 700 100 100 1585
685 700 100 100 1585
685 700 130 100 1615
800 700 130 100 1730
800 700 130 100 1730
800 700 130 100 1730
800 700 130 100 1730
mad(Z) %求绝对差分平均值
ans =
60.5938 50.0000 12.8906 0 114.2031
M=range(Z) %求工资差
M =
187 100 30 0 317
步骤5)绘制饼形图:
%绘制饼形图
subplot(2,3,4)
pie(M)
title('二维饼图')
subplot(2,3,5)
explode=[0 0 0 1 1];
pie3(M,explode)
title('三维分离饼图')
%绘制柱状图
subplot(2,3,6)
hist(M)
title('高斯分布柱状图')
程序完整代码:
%创建统计工资对应的矩形
jb=[800;685;685;613;800;613;800;685;613;613;800;685;613;613;685;613] %基本工资统计
jj=[700;700;600;600;700;700;700;700;600;600;700;600;600;600;700;600]; %奖金统计
zf=[130;100;100;100;130;100;130;100;100;100;130;100;100;100;130;100]; %住房基金统计
bx=100*ones(16) ;
bx=bx(:,1) %保险统计
SF=jb+jj+zf+bx %实发工资结果
Z=[jb jj zf bx SF] %工资清单统计结果
%绘制条形图
subplot(2,3,1)
bar(Z)
title('二维条形图')
subplot(2,3,2)
bar3(Z),title('三维条形图')
%绘制饼形图
subplot(2,3,3)
area(Z)
grid on
colormap summer
set(gca,'layer','top')
title('面积图')
%对工资多少进行排序
max(Z) %求最大值
sort(Z) %从小到大排列工资单
mad(Z) %求绝对差分平均值
M=range(Z) %求工资差
%绘制饼形图
subplot(2,3,4)
pie(M)
title('二维饼图')
subplot(2,3,5)
explode=[0 0 0 1 1];
pie3(M,explode)
title('三维分离饼图')
%绘制柱状图
subplot(2,3,6)
hist(M)
title('高斯分布柱状图')