学习MATLAB的绘图功能
具体内容有:
1.绘制二维图形,并对二维图形进行标注
2.调整图形
3.子图窗口的划分
4.绘制三维图形
5.使用交互绘图工具
1.二维图形
1)基本图形的绘制
>> x = [0:2:18];
>> y = [0,0.33,4.13,6.29,6.85,11.19,13.19,13.96,16.33,18.17];
>>plot(x,y),title('实验1'),xlabel('时间'),ylabel('距离'),grid
以上代码可以在一行上使用一起执行也可以分开执行,当使用逗号间隔时表示要一起执行,各函数分别表示: title(标题),xlabel(时间),ylabel(距离),grid(添加栅格)
代码执行的效果如下图:
2)创建多个图形
MATLAB可以随时生成和显示图形窗口,但生成的第二幅图形会覆盖掉第一幅图形。解决方法有两个:一是用pause命令暂停程序,二是用figure创建新的图形。
>> figure(2)
可以创建一个新的空白绘图窗口,如果不指定括号中的编号,则MATLAB会自动产生图形编号
基本绘图功能函数总结如下:
函数 | 功能 |
---|---|
plot | 创建一个x-y坐标图 |
title | 添加标题 |
xlabel | 添加x轴标注 |
ylabel | 添加y轴标注 |
gride | 添加栅格 |
pause | 暂停程序观察图形 |
figure | 定义当前图形 |
hold | 保持图形 |
3)绘制多条曲线
hold on
方法可以用于绘制多条曲线,用于保持图形
>> x = 0:pi/100:2*pi;
>> y1 = cos(x*4);
>> plot(x,y1)
>> y2 = sin(x);
>> hold on;
>> plot(x,y2)
绘制图像后结果如下:
另一种方法可以使用
>> plot(x,y1,x,y2)
也可以绘制两条曲线
颜色问题:MATLAB中,绘图命令画出的第一条曲线以蓝色为默认颜色,使用hold on
方法每条线是由不同的绘图命令完成的,分两次完成绘制,因此两条曲线的颜色相同。plot(x,y1,x,y2)
语句是一次画出两个图形,为了区分第二个图形的默认颜色是绿色。
example:
>> x = 0:pi/100:2*pi;
>> y1 = cos(x) * 2;
>> y2 = cos(x) * 3;
>> y3 = cos(x) * 4;
>> y4 = cos(x) * 5;
>> z = [y1,y2,y3,y4];
>> plot(x,y1,x,y2,x,y3,x,y4)
4)peaks函数
函数peaks是MATLAB中的双变量正态分布的实体模型函数,用于演示图形功能。若函数peaks只有一个变量n,则会产生一个n*n的矩阵,函数peaks创建的矩阵可以作为函数plot的自变量。
>> plot(peaks(100))
5)单复数数组绘图
如果plot的输入是一个复数数组,则MATLAB以复数的实部为x轴,虚部为y轴进行绘图
>> A = [0+0i,1+2i,2+5i,3+4i];
>> plot(A),title('复数绘图'),xlabel('实部'),ylabel('虚部')
6)双复数数组绘图
如果plot的输入参数是两个复数数组,则忽略复数的虚部进行绘图。以第一个数组的实部作为x轴坐标,以第二个数组的虚部作为y轴坐标,绘制曲线。
>> A
A =
0.0000 + 0.0000i 1.0000 + 2.0000i 2.0000 + 5.0000i 3.0000 + 4.0000i
>> B = sin(A)
B =
0.0000 + 0.0000i 3.1658 + 1.9596i 67.4789 -30.8794i 3.8537 -27.0168i
>> plot(A,B),title('复数绘图'),xlabel('第一个数组的实部'),ylabel('第二个数组的实部')
警告: 复数 X 和/或 Y 参数的虚部已忽略
7)线条,颜色和标记的风格
help plot
doc plot
可以获取线条颜色和标记风格的详细信息,风格由中三部分组成
线条类型 | 点类型 | 颜色 |
---|---|---|
-实线 | · 点线 | y 黄色 |
:点 | o 圈线 | r 红色 |
-. 点划线 | × x线 | c 青色 |
– 虚线 | +字线 | m 洋红色 |
* 星形线 | g 绿色 | |
s 方形 | b 蓝色 | |
d 菱形 | w 白色 | |
p 五角星 | b 蓝色 | |
h 六角星 | k 黑色 |
example:
plot(x,y,':ok') % 点,圆圈,黑色
plot(x,y,'--xr') % 虚线,x形状,红色
plot(x,y,'-b') % 实线,默认点类型,蓝色
8)坐标轴定标和图例标注
函数 | 用法 |
---|---|
axis | 如果没有输入参数就将坐标轴固定在当前配置状态,再次输入axis会恢复对坐标轴的控制 |
axis(v) | axis的输入参数是一个四维矢量,分别定义了x轴和y轴的最小值和最大值,格式为[xmin,xmax,ymin,ymax] |
legend(‘string1’,’string2’,etc) | 添加图例,对不同曲线加以说明 |
text(x_coordinate,y_coordinate,’string’) | 在图形的不同位置添加文本框,输入参数为文本框的位置和内容 |
gtext(‘string’) | 添加文本框,框的位置由鼠标操作确定,该命令与函数text类似 |
example:
将x轴限定在-2到+3的范围内,将y轴限定在0到10范围内
axis([-2,3,0,10])
2.子图
使用subplot(m,n,p)
命令可以把图形窗口分成m行n列的多个区域,并在第p个小窗口绘制下一个图形
example:
>> x = 0:pi/20:2*pi;
>> subplot(2,1,1) % 在两行一列的上半部分绘图
>> plot(x,sin(x))
>> subplot(2,1,2) % 在两行一列的下半部分绘图
>> plot(x,sin(2*x))
3.其他类型的二维图形
1)极坐标图
使用函数polar(theta,r)
>> x = 0:pi/100:pi;
>> y = sin(x);
>> polar(x,y)
2)对数图
>> x = 0:0.5:50;
>> y = 5 * power(x,2);
>> subplot(2,2,1)
>> plot(x,y),title('plot图')
>>
>> subplot(2,2,2)
>> semilogx(x,y),title('semilogx图')
>>
>> subplot(2,2,3)
>> semilogy(x,y),title('semilogy图')
>>
>> subplot(2,2,4)
>> loglog(x,x),title('loglog图')
3)条形图和饼图
条形图,柱状图和饼图是三种最常见的图形表现方式
函数 | 用法 |
---|---|
bar(x) | 若x为矢量则绘制垂直条形图,若为二维矩阵则按行分组显示 |
barh(x) | 若x为矢量则绘制水平条形图,若为二维矩阵则按行分组显示 |
bar3(x) | 绘制三维条形图 |
bar3h(x) | 绘制三维水平条形图 |
pie(x) | 绘制饼图。矩阵x的元素用饼图中的一部分表示 |
pie3(x) | 绘制三维饼图。矩阵x中的元素用饼图的一部分表示 |
hist(x) | 绘制柱状图 |
example:
>> x = [1,2,5,4,8];
>> y = [x;1:5];
>> subplot(2,2,1),bar(x),title('垂直条形图')
>> subplot(2,2,2),bar(y),title('两组显示的垂直条形图')
>> subplot(2,2,3),bar3(y),title('三维条形图')
>> subplot(2,2,4),pie(x),title('饼图')
>>
4)柱状图
柱状图是一种用于数据统计分析的图形,通过它可以显示出数据的分布情况
>> x = [100,95,74,87,22,78,34,35,93,88,86,42,55,48];
>> hist(x)
数据被默认分成10份,如果原始数据量很大,可以分成更多份
hist(x,25)
如果把函数hist赋值给一个变量,那么图中每个条形图中的数据就会存储在矩阵A中:
>> A = hist(x)
A =
1 2 1 1 1 0 1 1 3 3
4)双y轴图
有时需要把两个x-y坐标图输入到同一坐标图中,在这种情况下,如果两个坐标轴y轴的度量相差很多的话会会按照较大的度量来确定坐标轴的度量,这样度量较小的部分变化难以看出,如下所示:
首先在第一部分采用普通方式绘制二维图形:
>> x = 0:pi/20:2*pi;
>> y1 = sin(x);
>> y2 = exp(x);
>> subplot(2,1,1)
>> plot(x,y1,x,y2)
第二部分使用plotyy函数,可以在一张图中使用两个不同的y轴坐标作图,左边是第一组数据的y轴坐标,右边是第二组数据的y轴坐标
>> subplot(2,1,2)
>> plotyy(x,y1,x,y2)
函数plotyy可以选择不同的绘图类型,下面的代码采用对数坐标轴
>> subplot(2,1,1)
>> plotyy(x,y1,x,y2,'semilogy')
>> subplot(2,1,2)
>> plotyy(x,y1,x,y2,'semilogx')
4.三维绘图
三维绘图的MATLAB命令如下:
函数 | 用法 |
---|---|
plot3(x,y,z) | 绘制三维线图 |
come3(x,y,z) | 绘制具有动画效果的三维线图 |
mesh(z)或mesh(x,y,z) | 绘制网格曲面图 |
surf(z)或surf(x,y,z) | 绘制表面图 |
Shading interp | 渲染曲面图中的颜色 |
Shading flat | 用纯色给每个网格着色 |
colormap(map_name) | 按用户设定的颜色绘制曲面图 |
contour(z)或contour(x,y,z) | 绘制三维等高图 |
surfc(z)或surfc(x,y,z) | 同时绘制曲面图和等高图 |
pcolor(z)或pcolor(x,y,z) | 绘制伪色图 |
1)三维线图
plot3是绘制三维线图的基本函数,通过x,y,z三个输入矢量在三维空间内绘制三维线图
>> x = linspace(0,10*pi,1000);
>> y = cos(x);
>> z = sin(x);
>> plot3(x,y,z)
>> grid
>> xlabel('角度'),ylabel('cos(x)'),zlabel('sin(x)'),title('plot3绘图')
2)mesh曲面图
注意:若函数自变量是一个m*n矩阵,则矩阵中元素的数值为z轴坐标,元素的位置分别是x轴坐标和y轴坐标(要注意理解)
>> z = [1,2,3,4,5,6,7,8,9,10;
2,4,6,8,10,12,14,16,18,20;
3,4,5,6,7,8,9,10,11,12];
>> mesh(z),xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis')
mesh可以有三个自变量,mesh(x,y,z)。矢量x的元素个数必须和矩阵z的列数相同,矢量y的元素个数必须和矩阵z的行数相同(要注意理解)
>> x = linspace(1,50,10)
x =
1.0000 6.4444 11.8889 17.3333 22.7778 28.2222 33.6667 39.1111 44.5556 50.0000
>> y = linspace(500,1000,3)
y =
500 750 1000
>> z = [1,2,3,4,5,6,7,8,9,10;
2,4,6,8,10,12,14,16,18,20;
3,4,5,6,7,8,9,10,11,12]
z =
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 4 5 6 7 8 9 10 11 12
>> mesh(x,y,z)
3) surf曲面图
surf和mesh的不同之处在于,surf图绘制的是着色的三维曲面图,其颜色由z决定。
surf图的输入参数和mesh相同可以有一个输入变量也可以有三个输入变量。surf(z)以z的行列作为x轴和y轴的坐标。
使用shading命令可以控制图形的阴影效果
shading interp
使用colormap命令可以控制图形的颜色
>> mesh(x,y,z),colormap(summer)
4) 等高图
>> x = [-1:0.2:2];
>> y = x;
>> [X,Y] = meshgrid(x,y); % 采样点
>> Z = X .* exp(-X.^2 - Y .^2);
>> subplot(2,2,1),mesh(X,Y,Z)
>> subplot(2,2,2),surf(X,Y,Z)
>> subplot(2,2,3),contour(X,Y,Z)
>> subplot(2,2,4),surfc(X,Y,Z)
5) 伪色图
伪色图与等高图类似,不同之处在于伪色图是用带栅格的二维阴影图代替等高图中的轮廓线。根据MATLAB中实体模型函数peaks中的输入参数矩阵x,y,z做出伪色图,输出结果是一个类似山峰的曲面:
>> [x,y,z] = peaks;
>> subplot(2,2,1),pcolor(x,y,z)
>>
>> subplot(2,2,2),pcolor(x,y,z),shading interp
>>
>> subplot(2,2,3),pcolor(x,y,z),shading interp,hold on,contour(x,y,z,20,'k') % 其中20代表绘制20条等高线,k代表黑色
>>
>> subplot(2,2,4),contour(x,y,z)
5.图形窗口的简单操作
自己尝试一下就好