MATLAB:图形标注(坐标轴,图形注释,统计图形,离散数据图形,向量图形,综合示例)

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)');

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里插入图片描述
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

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

二.特殊图形:

为了满足用户的各种需求,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')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

>> %绘制面积图
 area(Y)
 grid on
 colormap summer
 set(gca,'layer','top')
 title('面积图')
>> 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
注意:上面代码中有这样一行很关键:

set(gca,'layer','top')

 
 
  • 1

我们有必要看看程序之中没有这行代码会怎么样:

在这里插入图片描述
两个图对比,不难发现,作用就是使网格子置于顶层,不会被覆盖:

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('三维分离饼图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

绘制柱状图

%指定的若干个相同的柱状图
 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('指定范围的高斯分布柱状图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

Y=randn(10000,1);
>> theta=Y*pi;
>> rose(theta);
>> title('极坐标系下的柱状图');

 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

三.离散数据图形:

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('误差棒图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
要能读懂:

  e=abs(x-y);
     errorbar(y,e)

 
 
  • 1
  • 2

横向显示的是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('三维火柴杆图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
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)

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

四.向量图形:

由于物理等学科的需要,在实际中有时会需要绘制一些带方向的图形,即向量图,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('羽毛图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

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

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

综合示例:
对某部门的工资情况进行分类汇总,结合教材第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
>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

步骤2)绘制条形图:

%绘制条形图
 subplot(2,3,1)
 bar(Z)
 title('二维条形图')
 subplot(2,3,2)
 bar3(Z),title('三维条形图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
步骤3)绘制面积图:

%绘制饼形图
 subplot(2,3,3)
 area(Z)
 grid on
 colormap summer
 set(gca,'layer','top')
 title('面积图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
步骤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

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

步骤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('高斯分布柱状图')

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述
程序完整代码:

%创建统计工资对应的矩形
 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(‘高斯分布柱状图’)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 5
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值