MATLAB绘图(二)

1、条形图绘制

        绘制条形图可以分为二维和三维两种情况:bar(竖直条形图)、barh(水平条形图)、bar3(三维竖直条形图)、bar3h(三维水平条形图),这些情况的函数调用格式都是一样的:

bar(y):以y为分量分别显示高度,横坐标为[1,length(y)];若y为矩阵,情况类似;

bar(x,y):在指定的x上绘制y,其中x为严格的单增向量;

bar(...,width):width为组内条形的间距,默认值为0.8(很小间距),若设置width=1,则组内的条形相互接触;

bar(...,'style'):style指定排列的类型,有“group”(默认)和“stack”两种。若Y为m*n大小的矩阵,group表示每组有n个条形且有m组,stack表示有m个条形且每个颜色不同,每个条形的高度为该行向量的和。

x = [1:10];
y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];
figure(2);
bar(x,y), xlabel('Student'),ylabel('Score'),
title('First Sem:')

2、饼图绘制

        饼图是用来显示向量或矩阵中各元素所占比例。二维为pie,三维为pie3,调用格式类似。

pei(X):用X中的数据画出一个饼图。若sum(X)<1,则画出的饼图不完整;

pei(X,explode):将每一部分的扇区偏移一定的位置,其中explode是一个与X同维的矩阵,当所有元素为0的时候,各部分扇形将组成一个圆。

X = [528 718 624 859];
explode = [0 1 0 1];
pie3(X,explode);
title('三维分离饼图');

3、面积图绘制

        面积图的绘制在实际中可以表现不同部分对整体的影响,其命令是area。

area(Y):绘制向量或者矩阵Y中的每一列作为单独的曲线并堆叠显示;

area(X,Y):绘制Y对X的图,填充0和Y之间的区域;

area(...,basevalue):basevalue指定区域填充的基值,默认为0。

Y = [45 4 6; 24 6 9; 19 4 3; 9 2 4; 25 8 15; 7 14 9];
area(Y);
grid on;
set(gca,'layer','top');    %将坐标的图层上移到顶层
title('面积图');

4、等高线的绘制

        [C, h] = contour(x,y,g);            
返回等高线矩阵C(包含定义等高线的数据)和Contour对象h。用x,y绘制z的等高线。

        meshgrid函数: 产生两个数组:
一个是y列x行,每行都相同,每一列按顺序为(-5,-4.9,。。。。。,5)
一个是x行y列,每列都相同,每一行按顺序为(-3,-2.9,。。。。。,3)Τ        

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); 
g = x.^2 + y.^2;        %数组运算为要加  ‘.’
[C, h] = contour(x,y,g);            
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
% get(h,'LevelStep')*2,显示值为LevelStep的2倍的值,让画出来的等高线一条隔一条地显示

set和get是设置和获得句柄对象属性值的函数;
ShowText为on就是显示等高线的值,off就是不显示等高线的值,默认为off;
LevelStep为m就是显示值为m的倍数的等高线,显然m越大,所绘制的等高线就越稀疏;
TextStep为n就是显示值为n的倍数的等高线的值,其它等高线的值不显示;
 

5、极坐标绘制

        极坐标系的坐标为 (ρ,θ)
polarplot              极坐标上按点进行绘图;
polarscatter           极坐标上绘制散点图;
polarhistogram         极坐标上绘制直方图;
compass        极坐标上绘制带箭头的图像;
ezpolar        极坐标上的函数绘图;

figure(1);      
angle=0:0.1:2*pi;       
length1=2*angle;
polarplot(angle,length1,'--r'); 
figure(2);      
length2=sin(angle);
polarplot(angle,length2,':b');
%极坐标中不支持在绘图函数中设定自变量的范围,可调用函数rlim
figure(3);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
polarplot(angle,length2,'b');
rlim([-1 1]);
figure(4);
polarscatter(angle,length1,'filled');   %不添加 filled 命令则默认为空心圆点
figure(5);
polarhistogram(length2)     %直方图是对数据点进行统计,然后绘制频数
figure(6);
compass([1 0 0 -1],[0 1 -2 1]);     %两个向量,第一个是四个横坐标,第二个是对应的纵坐标
%例如第一个箭头在平面坐标上(0,0)指向(1,0),转换到极坐标就是θ=0,ρ=1
figure(7);
ezpolar(@(angle)2*angle)
figure(8);
ezpolar(@sin);

6、三维图形的绘制

        三维图形的绘制的函数格式大多类似于二维,只是在参数上多加了一个第三维的信息。

surf :  绘制曲面图                                  mesh : 绘制网格图
surfc: 绘制带等高线的曲面图             meshc:  绘制带等高线的网格图
                                                              meshz: 绘制带帷幕的网格图
fsurf: 绘制基于函数的曲面图              fmesh: 绘制基于函数的

        上述函数的使用格式类似,仅拿mesh函数举例:

mesh(X,Y,Z):绘制三维网格图,颜色和曲面的高度相匹配;

mesh(Z):生成的网格图满足X=1:n与Y=1:m,[n,m]=size(Z);

mesh(Z,c):同mesh(Z),并进一步由c指定边的颜色。

x0=1:5;         
y0=6:11;            
[x,y]=meshgrid(x0,y0);   %把两个向量转变为两个矩阵
z=x.^3+y.^3;
figure(1);
c=randi(20,size(z));        %设定一个颜色变量,其大小要和函数 z 相同
surf(x,y,z,c,'linestyle','--');         %对线条颜色设定时要通过 属性对linestyle 进行设置
colorbar;   %插入颜色栏
figure(2);          
h=surf(x,y,z);      %获取图像的句柄
h.FaceAlpha=0.5;    %调整透明度 1-完全不透明  0-完全透明
figure(3);          
surfc(x,y,z);   %下方的曲线就是等高线
figure(4);          
mesh(x,y,z); 
figure(5);         
meshc(x,y,z); 
figure(6);          
meshz(x,y,z);   
figure(7);              
z=@(x,y)x.^3+y.^3;
h=fsurf(z);       %会把数据点取的很密
h.EdgeColor=[1 0 0];            
h.LineStyle=('--');
figure(8);              
z=@(x,y)x.^3+y.^3;
fmesh(z);

你可能感兴趣的:(matlab)