MATLAB数学建模之画图汇总


Posted in Python onJuly 16, 2020

1. 二维数据曲线图

1.1 绘制二维曲线的基本函数

1.plot()函数
plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。
例:

t=0:0.1:2*pi; 
x=2 * t; 
y=t.*sin(t).*sin(t); 
plot(x, y);

MATLAB数学建模之画图汇总 

2. 含多个输入参数的plot函数

plot函数可以包含若干组向量对,每一组可以绘制出一条曲线。含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)
例:

x=linspace(0,2*pi,100);
plot(x,sin(x),x,2*sin(x),x,3*sin(x))

MATLAB数学建模之画图汇总 

3. 含选项的plot函数

Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示

线型 颜色 标记符号
-实线 b蓝色 .点 s方块
:虚线 g绿色 o圆圈 d菱形
.-点划线 r红色 x叉 v朝下三角符号
?双划线 c青色 +加号 ^朝上三角符号
m品红 *星号
y黄色 >朝右三角符号 p 五角星
k黑色 h 六角星
w白色

MATLAB数学建模之画图汇总 

例: 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。

x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=(0:12)/2;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');

MATLAB数学建模之画图汇总 

在该plot函数中包含了3组绘图参数,第一组用黑色虚线画出两条包络线,第二组用蓝色双划线画出曲线y,第三组用红色五角星离散标出数据点。

例: 设置正弦曲线的线宽为 3,设置上三角形进行数据点的标记,并设置标记 点边缘为黑色,设置标记点填充颜色为红色,设置标记点的尺寸为 10,则 MATLAB 代码 如下:

% 横坐标轴 
x = linspace(0, 2*pi, 50); 
% 生成数据点,纵坐标轴 
y = 2 * sin(pi * x); 
% 绘图 
figure 
% 设置线的宽带为3 
plot(x, y, 'k--^', 'LineWidth', 3, ...   
  'MarkerEdgeColor', 'k', ... %设置标记点的边缘颜色为黑色   
  'MarkerFaceColor', 'r', ... %设置标记点的填充颜色为红色   
  'MarkerSize', 10)  %设置标记点的尺寸为10

MATLAB数学建模之画图汇总 

例: 利用五角星标记例两曲线的交叉点

% 横坐标轴 
x = linspace(0, 2*pi, 1000); 
% 生成数据点,纵坐标轴 
y1 = 0.2 * exp(-0.5 * x).* cos(4 * pi * x); 
y2 = 2 * exp(-0.5 * x) .* cos(pi * x); 
% 查找y1与y2相等点(近似相等)的下标 
k = find( abs(y1-y2) < 1e-2 ); 
%取y1与y2相等点的x坐标 
x1 = x(k); 
% 求y1与y2值相等点的y坐标 
y3 = 0.2 * exp(-0.5 * x1) .* cos(4 * pi * x1); 
% 绘图 
figure 
plot(x, y1, 'r-.', x, y2, 'k:', x1, y3, 'bp','LineWidth',2);

MATLAB数学建模之画图汇总

4. 双纵坐标函数plotyy

在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比分析。使用格式为:plotyy(x1,y1,x2,y2)
x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左边的对应x1,y1数据对,右边的对应x2,y2。

x=0:pi/100:2*pi; 
% 生成曲线 
y1=0.2*exp(-0.5*x).*cos(4*pi*x); 
y2=2*exp(-0.5*x).*cos(pi*x); 
% 绘图 
figure 
plotyy(x,y1,x,y2); 
plot(x, y1, 'k-', x, y2, 'k-', 'LineWidth', 3)

MATLAB数学建模之画图汇总

1.2 绘制图形的辅助操作

1. 图形标注

title('图形名称')
xlabel('x轴说明')
ylabel('y轴说明')
text(x,y,'图形说明')
legend('图例1','图例2',…)

title、xlabel和ylabel函数分别用于说明图形和坐标轴的名称。

text函数是在坐标点(x,y)处添加图形说明。

legend函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在空白处,用户还可以通过鼠标移动图例,将其放到所希望的位置。

除legend函数外,其他函数同样适用于三维图形,在三维中z坐标轴说明用zlabel函数。

例:绘制正弦和余弦曲线,设置图形的标题、x 轴和 y 轴的标注,设置曲线标 准。

% 横轴 
x=0:pi/50:2*pi; 
% 曲线数据 
y1=sin(x); 
y2=cos(x); 
% 绘图 
figure 
plot(x, y1, 'k-', x, y2, 'k-.') 
% 文本标注 
text(pi, 0.05, '\leftarrow sin(\alpha)') 
text(pi/4-0.05, 0.05, 'cos(\alpha)\rightarrow') 
% 标题标注 
title('sin(\alpha) and cos(\alpha)') 
% 坐标轴标注 
xlabel('\alpha') 
ylabel('sin(\alpha) and cos(\alpha)')

MATLAB数学建模之画图汇总 

2. 坐标控制

axis([xmin xmax ymin ymax zmin zmax])
如果只给出前四个参数,则按照给出的x、y轴的最小值和最大值选择坐标系范围,绘制出合适的二维曲线。如果给出了全部参数,则绘制出三维图形。
axis函数的功能丰富,其常用的用法有:

  • axis equal:纵横坐标轴采用等长刻度
  • axis square:产生正方形坐标系(默认为矩形)
  • axis auto:使用默认设置
  • axis off:取消坐标轴
  • axis on:显示坐标轴
  • axis tight:按紧凑方式显示坐标轴范围,即坐标轴范围为绘图数据的范围
  • grid on/off:命令控制画还是不画网格线

例:观察曲线 y=cos(tan(πx))在 x=0.5 附近的图形曲线

% x轴 
x = 0:1/3000:1; 
% 生成误差曲线 
y = cos(tan(pi*x)); 
% 绘图 
figure 
% 分裂窗口为2*1个子窗口 
subplot(2,1,1) 
plot(x,y) 
title('\itcos(tan(\pix))') 
% 坐标轴调整 
subplot(2,1,2) 
plot(x,y) 
axis([0.4 0.6 -1 1]); 
title('复杂函数的局部透视')

MATLAB数学建模之画图汇总

subplot(m,n,p)
该函数把当前窗口分成m×n个绘图区,m行,每行n个绘图区,区号按行优先编号。其中第p个区为当前活动区。每一个绘图区允许以不同的坐标系单独绘制图形。

1.3 绘制二维图形的其他函数

1. 对数坐标图
在实际应用中,经常用到对数坐标,Matlab提供了绘制对数和半对数坐标曲线的函数,其调用格式为:

semilogx(x1,y1,选项1,x2,y2,选项2,…)
semilogy(x1,y1,选项1,x2,y2,选项2,…)
loglog(x1,y1,选项1,x2,y2,选项2,…)

这些函数中选项的定义和plot函数完全一样,所不同的是坐标轴的选取。
semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。semilogy恰好和semilogx相反。
loglog函数使用全对数坐标,x、y轴均采用对数刻度。
例:绘制函数 y=ex" role="presentation">

% x轴 
x=0:0.5:5; 
% y轴 
y = exp(x); 
% 绘图 
figure 
% 笛卡尔坐标系 
subplot(4, 1, 1) 
plot(x, y, 'r-.') 
title('笛卡尔坐标系') 
% 半对数坐标系 
subplot(4, 1, 2) 
semilogx(x, y, 'g:') 
title('x轴为对数坐标系') 
subplot(4, 1, 3) 
semilogy(x, y, 'b-') 
title('y轴为对数坐标系') 
% 对数坐标系 
subplot(4, 1, 4) 
loglog(x, y, 'k:','LineWidth',4) 
title('对数坐标系')

MATLAB数学建模之画图汇总 

1. 饼图

  • - pie(x):绘制数据 x 的饼图,x 可以是向量或者矩阵,x 中的每一个元素将代表饼图的一个扇区,同时饼图中显示各元素总和的比例。
  • - pie(x, explode):绘制数据 x 的饼图,其中参数 explode 可以用来设置饼图中某个重要的扇区进行抽取式重点显示,这里需要注意的是,explode 向量的长度与 x 中的元素个数相等,并与 x 中的元素意义对应,explode 元素为非零值,对应的元素扇区将从饼图中分离显示,通常非零值都设置为 1。
  • - pie(x, labels):绘制数据 x 的饼图,其中参数 labels 可以用来设置饼图中各个扇区的显示标注,注意参数 labels 应该为字符串或者数字利用向量 X中的数据描绘饼图

例:有一位研究生,在一年中平均每月的费用为生活费 190 元,资料费 33 元, 电话费 45 元,购买衣服 42 元,其他费用 45 元。请以饼图表示出他每月的消费比例,并在 饼图中分离出使用最多的费用和使用最少的费用的切片。

% 数据准备 
x=[190 33 45 42 45]; 
% 分离显示设置 
explode=[1 1 0 0 0]; 
% 绘图 
figure() 
colormap hsv 
pie(x,explode,{'生活费','资料费','电话费','购买衣服','其他费用'}) 
title('饼图')

MATLAB数学建模之画图汇总 

2. 条形图
看例子:

%随机函数产生5*3的数组,对产生的数据取整 
Y = round(rand(5,3)*10); 
% 绘图 
subplot(2,2,1) 
bar(Y,'group') 
title 'Group' 
%堆型二维垂直条形图 
subplot(2,2,2) 
bar(Y,'stack') 
title('Stack') 
%堆型二维水平条形图 
subplot(2,2,3) 
barh(Y,'stack') 
title('Stack') 
%设定条形的宽度为1.5 
subplot(2,2,4) 
bar(Y,1.5) 
title('Width = 1.5')

MATLAB数学建模之画图汇总 

例:有一位研究生,在一年中平均每月的费用为生活费 190 元,资料费 33 元, 电话费 45 元,购买衣服 42 元,其他费用 45 元。请以柱状图表示出他每月的消费比例。 MATLAB 代码如下:

% 数据准备 
y=[190 33 45 42 45]; 
x=1:5 ;
% 绘图 
figure 
bar(x,y) 
title('柱状图'); 
set(gca,'xTicklabel',{'生活费','资料费','电话费','购买衣服','其他费用'})

MATLAB数学建模之画图汇总 

3. 排列图
排列图又称累托(Pareto)图,由一 个横坐标、两个纵坐标、多个按高低顺序 排列的条形和一条折线组成。其中,横坐 标表示各因素,左纵坐标表示频数,右纵 坐标表示频率,折线表示累积的频率。该 图能较好地分析各因素的重要性,可用于 寻找主要问题或主要原因。在MATLAB 中 pareto()函数用于绘制排列图,其调用格式如下:
pareto(y):绘制数据y的排列图。y值的大小用排列图条形的高度表示。pareto(y,x):绘制数据y的排列图。当x为数值时,用于指定数值型的横坐标。当 x 为字符串时,用于指定字符串型的横坐标。

Y=[100 98 97 90 90]; 
names={'第1名' '第2名' '第3名' '第4名' '第5名'}; 
pareto(Y,names)

MATLAB数学建模之画图汇总

2. 三维图形

2.1 绘制三维曲线

1.用plot3()函数画三维曲线
最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。其调用格式为:
plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…)
其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。
例:

t=0:pi/50:2*pi;
x=8*cos(t);
y=4*sqrt(2)*sin(t);
z=-4*sqrt(2)*sin(t);
plot3(x,y,z,'p');
title('Line in 3-D Space');
text(0,0,0,'origin');
xlabel('X');ylabel('Y');zlabel('Z');grid;

MATLAB数学建模之画图汇总 

2. 三维网格图的绘制
在 MATLAB 中,进行三维图形绘制时,常常需要首先创建三维网格,也就是先创建 平面图的坐标系。在 MATLAB 中,常用 meshgrid()函数生成网格数据,其调用格式如下。
[X,Y]=meshgrid(x,y):用于生成向量 x 和 y 的网格数据,即变换为矩阵数据 X 和 Y, 矩阵 X 中的行向量为向量 x,矩阵 Y 的列向量为向量 y。[X,Y]=meshgrid(x):生成向量 x 的网格数据,函数等同[X,Y]=meshgrid(x,x)
[X,Y,Z]=meshgrid(x,y,z) :生成向量 x、y、z 的三维网格数据,生成的数据 X 和 Y 可分别表示三维绘图中的 x 和 y 坐标。
三维网格图形是指在三维空间内连接相邻的数据点,形成网格。在MATLAB中绘制三维网格图的函数主要有mesh()函数、meshc()函数和meshz()函数。其中,mesh()函数最常 用,其调用格式如下:
mesh(x,y,z):绘制三维网格图,x、y、z 分别表示三维网格图形在 x 轴、y 轴和 z 轴 的坐标,图形的颜色由矩阵 z 决定。
mesh(Z):绘制三维网格图,分别以矩阵 Z 的列下标、行下标作为三维网格图的 x 轴、y 轴的坐标,图形的颜色由矩阵 Z 决定。
mesh(...,C):输入参数C用于控制绘制的三维网格图的颜色。mesh(...,'PropertyName',PropertyValue,...):设置三维网格图的指定属性的属性值。
函数 meshc()可绘制带有等值线的三维网格图,其调用格式与函数 mesh()基本相同, 但函数 meshc()不支持对图形网格线或等高线指定属性的设置。
函数 meshz()可绘制带有图形底边的三维网格图,其调用格式与函数 mesh()基本相同, 但函数 meshz()不支持对图形网格线指定属性的设置。
另外,函数ezmesh()ezmeshc()ezmeshz()可根据函数表达式直接绘制相应的三维网格图。
由于网格线是不透明的,绘制的三维网格图有时只能显示前面的图形部分,而后面的 部分可能被网格线遮住了,没有显示出来。 MATLAB中提供了命令 hidden 用于观察图形后面隐藏的网格,hidden 命令的调用格式如下:
hidden on:设置网格隐藏部分不可见,默认情况下为此状态。
hidden off:设置网格的隐藏部分可见。
hidden:该命令用于切换网格的隐藏部分是否可见。

例:绘制简单的三维网格图

% 数据准备 
t=0:pi/10:pi; 
x=sin(t); 
y=cos(t); 
[X,Y]=meshgrid(x,y); 
z =X + Y;  
% 绘图 
figure 
mesh (z,'FaceColor','W','EdgeColor','K')
grid 
title('三维网格图');

MATLAB数学建模之画图汇总

2.2 三维表面图的绘制

三维表面图也可以用来表示三维空间内数据的变化规律,与之前讲述的三维网络图的 不同之处在于对网格的区域填充了不同的色彩。在 MATLAB 中绘制三维表面图的函数为 surf()函数,其调用格式如下:
surf(Z):绘制数据 Z 的三维表面图,分别以矩阵 Z 的列下标、行下标作为三维网格图的 x 轴、y 轴的坐标,图形的颜色由矩阵 Z 决定。
surf(X, Y, Z):绘制三维表面图,X、Y、Z 分别表示三维网格图形在 x 轴、y 轴和 z 轴的坐标,图形的颜色由矩阵 Z 决定。
surf(X, Y, Z, C):绘制三维表面图,输入参数 C 用于控制绘制的三维表面图的颜色。
surf(..., 'PropertyName', PropertyValue):绘制三维表面图,设置相应属性的属性值。
函数 surfc()用于绘制带等值线的三维表面图,其调用格式同函数 surf()基本相同,函数 surfl()可用于绘制带光照模式的三维表面图,与函数 surf()surfc()不同的调用格式如下:
surfl(...,'light'):以光照对象 light 生成一个带颜色、带光照的曲面。surfl(...,'cdata'):输入参数 cdata 设置曲面颜色数据,使曲面成为可反光的曲面。
surfl(...,s):输入参数 s 为一个二维向量[azimuth,elevation],或者三维向量[x,y,z],用于指定光源方向,默认情况下光源方位从当前视角开始,逆时针 45°。
例:简单对 surf()函数进行举例

% 数据准备 
xi=-10:0.5:10; 
yi=-10:0.5:10; 
[x,y]=meshgrid(xi,yi); 
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2); 
% 绘图 
surf(x,y,z)

MATLAB数学建模之画图汇总

2.3 三维切片图的绘制

在MATLAB中slice()函数用于绘制三维切片图。三维切片图可形象地称为“四维图”,可以在三维空间内表达第四维的信息,用颜色来标识第四维数据的大小。slice()函数的调用格式如下:
slice(v, sx, sy, sz):输入参数 v 为三维矩阵(阶数为 m x n x p),x、y、z 轴默认状态下分别为 1:m、1:n、1:p,数据 v 用于指定第四维的大小,在切片图上显示为不同的颜色,输入参数 sx、sy、sz 分别用于指定切片图在 x、y、z 轴所切的位置。
slice(x ,y, z, v, sx, sy, sz):输入参数 x、y、z用于指定绘制的三维切片图的 x、y、z轴。
slice(...,'method'):输入参数method用于指定切片图绘制时的内插值法,'method' 可以设置的参数有:'linear'(三次线性内插值法,默认)、'cubic'(三次立方内插 值法)、'nearest'(最近点内插值法)。
例:观察函数在-2≤x≤2、-2≤y≤2、-2≤z≤2 上的体积情况

% 数据准备 
xi=-10:0.5:10; 
yi=-10:0.5:10; 
[x,y]=meshgrid(xi,yi); 
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2); 
[x,y,z] = meshgrid(-2:.2:2, -2:.25:2, -2:.16:2); 
v = x.*exp(-x.^2-y.^2-z.^2); 
xslice = [-1.2,.8,2]; 
yslice = 2; 
zslice = [-2,0]; 
% 绘图 
slice(x,y,z,v,xslice,yslice,zslice)

MATLAB数学建模之画图汇总

到此这篇关于MATLAB数学建模之画图汇总的文章就介绍到这了,更多相关MATLAB 画图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python实现在线程里运行scrapy的方法
Apr 07 Python
Python获取运行目录与当前脚本目录的方法
Jun 01 Python
python中的错误处理
Apr 10 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
Python魔法方法详解
Feb 13 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python剪切视频与合并视频的实现
Mar 03 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
浅析Python迭代器的高级用法
Jul 16 #Python
python 使用递归的方式实现语义图片分割功能
Jul 16 #Python
Django serializer优化类视图的实现示例
Jul 16 #Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 #Python
Python实现GIF图倒放
Jul 16 #Python
浅谈python处理json和redis hash的坑
Jul 16 #Python
Python requests及aiohttp速度对比代码实例
Jul 16 #Python
You might like
php strcmp使用说明
2010/04/22 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
关于document.cookie的使用javascript
2010/10/29 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
Python List cmp()知识点总结
2019/02/18 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python里反向传播算法详解
2020/11/22 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
司机岗位职责
2013/11/15 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
ant design vue的form表单取值方法
2022/06/01 Vue.js