Matlab画三维图的一些技巧

1 篇文章 2 订阅
订阅专栏

引言

本人是一位数学科研工作者,平时的文章采用的是latex编写,里面图形的生成主要来自于Matlab(个人对Matlab非常喜欢,感觉上手比较容易,更亲民)。对于图形的处理比较频繁,而且总会有一些特殊的需求,每次都要上网搜查,或者查以前用过的命令,经常花了很多时间,实现了一点小要求,事后回想有点得不偿失。因此借助这个平台,记录自己在Matlab使用过程中碰到的一些问题,给出我找到或者知道的解决办法,不过方法不是唯一的,也希望广大网友能有更好的思路提供。后续碰到的问题我也会继续更新(如果我有时间的话哈)。

Matlab画三维图

Matlab画三维图形的需求通常是针对二元函数而言的,Matlab画图主要采用描点的方法,就是画出给定点对应的值,然后Matlab会自动把这些点连接起来,就成了很漂亮的一幅图。所以你给的点越多,画的图就越精确。

一个简单的例子

下面我们以函数 u = s i n ( x ) s i n ( y ) u=sin(x)sin(y) u=sin(x)sin(y)为例,画三维图形的代码如下:

function PF_3D
px=100; py=150; %x轴我布100个点,y方向布150个点
x=linspace(0,2*pi,px); %该函数表示在[0,2*pi]上均匀布px个点
y=linspace(0,2*pi,py);
[X,Y]=meshgrid(x,y); %该函数的作用详见下文
u=sin(X).*sin(Y); %计算对应点的函数值u %注意点乘
surf(X,Y,u); %画图
%mesh(X,Y,u);
end

代码中的meshgrid命令是生成 m × n m\times n m×n的X,Y两个矩阵,这里m是y的长度,n是x的长度,结果如下图Matlab代码
在这里插入图片描述X就是把x向量复制了m行,每行都一样。Y就是把y复制了n列,每列都一样,这样X,Y矩阵相同位置的值就对应了点的横纵坐标(总共有 m × n m\times n m×n个点),再由前面代码计算得到u就得到点对应的函数值。最后可以通过mesh或者surf命令进行画图就。mesh和surf是有区别的,但是我也没去区分,我自己常用的是surf命令,下面看两个命令画出图的不同(左边是surf,右边是mesh)
左边是surf,右边是mesh
上图中左边surf画出来的图比较黑那是因为Matlab在图上画了黑色网格线,如果要去掉他可以在后面加命令:

shading interp

效果如图:
在这里插入图片描述
如果不喜欢后面坐标平面的那些网格线,也可以加命令:

grid off

就可以让它消失。

坐标轴的设置

1.从上面的图可以看出,如果不加干预的话,Matlab画出你给的横纵数值范围的全部图形,但有些时候我们可能比较关心局部的图样,这时候就要设置图形坐标轴的显示范围,只要在surf命令后面加命令:

axis([0,2,0,4,0,1])

axis里面参数分别对应x_min,x_max,y_min,y_max,z_min,z_max,效果如图
在这里插入图片描述
2.有些问题他的图形是长条形的,如x轴应该很长,y,z轴比较短的,但Matlab总是画得“方方正正”,这样就会变得不美观(肯定有个轴被压缩),所以此时我们选择控制轴的相对长度,可以在surf后面加命令:

pbaspect([211]);

pbaspect后面得三个参数表示横纵竖得长度比例是2:1:1,最后效果如图:(我们这个例子不需要让轴变长,拉长反而不好看,为了演示拼了)
在这里插入图片描述
3.隐藏坐标轴。有时候我们保存多张图,只是为了体现图形的变化,这样就不需要每个坐标轴刻度和数值都显示出来,所以我们要隐藏坐标轴,这个在网上有很多人提供了方案,但是个人觉得比较好用的方案是在surf后面添加如下命令

 t=0:0:0;
 set(gca,'xtick',t); %这两句话可以去掉x轴的刻度和坐标值
 xlabel('x轴的说明') %这句话可以坐标的下面添加一个说明
 set(gca,'ytick',t); %这两句话可以去掉y轴的刻度和坐标值
 ylabel('y轴的说明') %这句话可以坐标的下面添加一个说明 
 set(gca,'ztick',t); %这两句话可以去掉y轴的刻度和坐标值
 zlabel('z轴的说明') %这句话可以坐标的下面添加一个说明 

直接看效果在这里插入图片描述
横纵竖的刻度和刻度值都消失了,留下了三条边缘黑线,至于这个怎么去了目前还不知道(是不是可以设置刻度线的颜色成白色就行?)。上面的方案原出处可以在 该网页查看。
4.其他坐标轴设置。还有很多坐标轴的设置可以直接上网查找,或者直接编辑图片,如何编辑呢?就是直接在生成的图像窗口点查看-属性编辑器(我用的2019版本的是这样,在以前的版本在图形窗口有个图标直接点就行了,但是19版本没有了,感觉没有了很难受,谁知道怎么添加这个属性编辑器的快捷图标到工具栏里)。进入属性编辑器之后,就会发现里面有好多对图形的坐标轴的设置,还是挺好用的,但是如果对很多图同时处理的画,这样效率很低,还是能用代码解决的就用代码解决。

图形的视角

有时候我们不需要三维的立体图,可能只要俯视图或者侧视图,通过图形的颜色区别函数值的大小。这时候我们就需要对图形进行旋转,一种办法就是直接对生成图形进行旋转(看工具栏上有,或者鼠标移到图上就有这个旋转工具跳出来)。第二种办法就是加命令

view(0,90) %俯视图xoy平面,x为横轴
%view(-90,0) %侧视图yoz平面,y为横轴
%view(0,0) %侧视图xoz平面,x为横轴

效果如图
在这里插入图片描述
但这样光有颜色没有标明颜色对应的值,我们可以在图形窗口点插入颜色栏图标(上图工具栏中的第六个图标)会在右侧出现颜色栏。如果对这个颜色栏不喜欢,可以右击刚生成的颜色栏选择标准颜色图,选自己喜欢的打勾就行(我比较喜欢jet)。上面的过程也可以直接采用如下命令实现:

colorbar  %显示颜色栏
colormap(jet)  %颜色的风格选择

效果如下:
在这里插入图片描述

图像的保存

图像的保存一种就是直接在图形窗口,文件-另存为就有好多的格式供你选择,我们写论文的时候一般要求是eps格式的图片,因为它是矢量图,放大不失真,Matlab有提供这个选择,两个字完美!这种通过选择保存图片的方式非常笨拙,一两个图还行,多个图的产生,或者程序需要长时间运行的不想干等的就比较麻烦,所以还是代码来解决吧。

我们以一个例子来爽快的解决这个问题。比如我们打算画函数图
u = s i n ( k x ) c o s ( k y ) u=sin(kx)cos(ky) u=sin(kx)cos(ky)这里的 k k k的取值[1,2,3],现在要将每个 k k k对应的图保存到当前路径的figures文件夹里(这个文件夹要原先要存在),文件命保存成fg1.fig,fg2.fig,fg3.fig(.fig是Matlab图形保存是默认的后缀名,这样后缀的图形可以再由Matlab打开)。给出如下代码:

function PFS
px=100; py=150; %x轴我布100个点,y方向布150个点
x=linspace(0,2*pi,px); %该函数表示在[0,2*pi]上均匀布px个点
y=linspace(0,2*pi,py);
[X,Y]=meshgrid(x,y); %该函数的作用详见下文
fid=[pwd,'\figures\']; %这个命令用fid指当前路径下的figures文件夹
for k=1:3
    u=sin(k*X).*sin(k*Y); %计算对应点的函数值u %注意点乘
    figure(k) %创建第k个图形窗口
    surf(X,Y,u); %画图
    M=int2str(k);%将k转化成字符存到M中
    saveas(gcf,[fid,'f',M,'.fig']);
end
end

上段代码的核心:1.创建图窗 2.保存图形。先看创建图窗的命令就是

figure(k) %创建第k个图形窗口

注意k一定要加括号,没有括号不行。这个figure命令是k的for循环命令内,这样就可以随着k的变化创建不同的图窗,然后再fiugure(k)后面跟上画图命令,图就会画到相应的图窗。这样就避免了后面画的图覆盖前面画的图情形。接着就是保存图形,我们首先再for循环的外围给命令

fid=[pwd,'\figures\']; 

这个fid变量是为了保存图像要保存的路径,参数pwd是Matlab自带的表示当前路径,\figures\就是figures文件夹(因为所有的图都要保存到这个文件夹里,所以这个命令放在for循环的外面)。在for循环内容我们要给图像名字起fg1.fig,fg2.fig,fg3.fig,注意名字上的1,2,3其实就是k的值,但是k是个数值(整数值),而文件名应该是个字符串,所以首先先将k转化成字符串

 M=int2str(k);%将k转化成字符存到M中

然后再合成一个完整的路径就是[fid,‘f’,M,’.fig’],这个中括号,中间逗号起到了字符串左右拼接的作用,注意里面已经是字符串了不用加引号,不是的要加。最后通过saveas函数进行图像保存:

saveas(gcf,[fid,'f',M,'.fig']);

saveas第一个参数gcf我也不知什么意思,是否是获取图片的意思,我就当默认处理了。
如果是要将图片保存成eps格式的画,要把saveas的参数命令中的’.fig’改成’.eps’,但如果仅仅如此的话,保存最终的eps图像是黑白的(我的Matlab是这样,不知道你们是否也是),如果想要是彩色的,要在后面额外加一个参数’psc2’,具体代码如下:

saveas(gcf,[fid,'f',M,'.eps'],'psc2');

这样就大功告成。

结束语

如果读者有碰到一些Matlab的问题也可以留言提问,如果我知道的话也会告知。

文中很多方法是我看书或者搜索到的,如果有侵权请告知,我深表歉意。

matlab鼠标三维坐标点,请问如何用matlab三维点,已知x,y,z的坐标,在三维坐标系上显示...
weixin_35334000的博客
03-16 4464
点击查看请问如何用matlab三维点,已知x,y,z的坐标,在三维坐标系上显示具体信息答:例如 : X=1,Y=2,Z=3; 代码就是: plot3(1,2,3,'*') grid on%加网格答:例如 : X=1,Y=2,Z=3; 代码就是: plot3(1,2,3,'*') grid on%加网格答:看这些点是不是很规矩的网格点的数据。 如果是网格点数据,适当做点重组,就可以用surf函数得...
matlab】【三维极坐标图】
最新发布
wq6qeg88的博客
04-23 272
【代码】【matlab】【三维极坐标图】
matlab怎么做三维矢量图,MATLAB三维空间绘制向量和面
weixin_29062613的博客
03-16 4406
1.绘制带箭头向量图,见下面实例:clear;clc;A=[4,5,6];B=[-10,6,7];C=[-18,0];scale=1;quiver3(A(1),A(2),A(3),B(1)-A(1),B(2)-A(2),B(3)-A(3),scale);%表示以A为起点,由A指向Btext(A(1),A(2),A(3),‘A‘);%在A点附件标注字母Aaxis([-104 5 8 07]);xla...
MATLAB三维图形绘制
01-08
MATLAB绘制三维图的程序  在MATLAB中,利用meshgrid函数产生平面区域内的网格坐标矩阵。mesh(x,y,z,c):网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):完整曲面,将数据点所表示曲面出。 sphere函数的调用格式为: 其他三维图函数分别是
matlab中绘制三维散点图scatter3函数的使用方法(附matlab代码)
iii66yy的博客
07-05 6万+
在向量 X、Y 和 Z 指定的位置显示圆圈。使用 S 指定的大小绘制每个圆圈。要绘制大小相等的圆圈,请将 S 指定为标量。要绘制具有特定大小的每个圆,请将 S 指定为向量。使用 C 指定的颜色绘制每个圆圈。 如果 C 是 RGB 三元组,或者是包含颜色名称的字符向量或字符串,则使用指定的颜色绘制所有圆圈。 如果 C 是一个三列矩阵,其中 C 中的行数等于 X、Y 和 Z 的长度,则 C 的每行指定相应圆圈的 RGB 颜色值。 如果 C 是长度与 X、Y 和 Z 的长度相同的向量,则 C 中的值线性映射到当前
利用matlab绘制各种三维图.doc
04-13
内容涵盖各种基本函数、具体使用说明、注意事项、常用技巧和对应的效果图,用户可以根据自己需求快速选择!
使用MATLAB进行三维图像绘制
weixin_57109262的博客
03-11 9万+
使用MATLAB进行三维图像绘制
MATLAB 立体绘图
qq_45384561的博客
03-09 1万+
MATLAB绘图基础2 MATLAB的立体绘图2.1 生成网格坐标矩阵的函数2.2 三维曲面的函数2.3 三维旋转体的绘制柱面图球面图2.4 三维图形的处理视点处理色彩处理消隐处理裁剪处理❤隐函数作图 2 MATLAB的立体绘图 2.1 生成网格坐标矩阵的函数 [X,Y]=meshgrid(x,y) 生成X-Y平面的网格坐标矩阵 [X,Y,Z]=sphere(n) 生成球面的三维...
Matlab --- 如何用matlab三维坐标系中一个三维向量
松下J27录放机
05-22 4461
本文简单的介绍了如何用matlab三维坐标系中一个向量
MATLAB 三维图的俯视图,更改横纵坐标方向
电力电子&电能质量求交流,加Q164429350
02-09 6586
审稿人让我更改axis direction,但matlab默认的命令IMAGESC,会使得俯视图的方向变得很奇怪,因此可以在:编辑-》坐标区属性中进行更改,改变Ydir。
利用matlab三维数据三维立体图
热门推荐
心网千劫
08-20 11万+
首先先分析对象。将数据利用matlab出图,最开始是导入数据,然后处理数据,最后将处理的数据出来。 所以我将它分为三个步骤。 第一步:导入数据 如果是mat数据。可以直接load 如果是txt数据。可以用txtread 如果是excel数据。可以用xlsread 详细的,可以参考https://blog.csdn.net/blueskyjian/article/details/728...
MATLAB 特殊绘图合集源代码
03-08
3D绘图:MATLAB可以绘制三维图形,包括曲面图、散点图、等高线图等。通过使用`plot3`、`surf`、`scatter3`等函数,可以在三维空间中展示数据的分布和关系。 2. 动态绘图:MATLAB支持动态绘图,可以通过更新数据和...
使用MATLAB圆柱圆锥圆台
02-27
MATLAB 圆柱圆锥圆台基本技巧 自己建一个M文件,命名任意,如tu.m 在命令窗口输入:tu
MATLAB进阶绘图.md
08-01
通过这些示例,用户可以学习如何创建数据、使用不同的绘图函数、设置标题、坐标轴标签和图例,以及绘制三维曲面等进阶绘图技巧。这个资源旨在帮助具备一定MATLAB编程基础的用户进一步提升绘图能力,增加对MATLAB绘图...
matlab做图技巧
03-02
结合实例介绍matlab二维、三维图的绘制方法,及图形的后续处理技巧
MATLAB 之 绘制三维图形的基本函数、三维曲面和其他三维图
每天进步一点点!
05-25 1万+
【代码】MATLAB 之 绘制三维图形的基本函数、三维曲面和其他三维图形。
Matlab学习手记】三维矢量场图
Taosy
09-30 1万+
clear; clc; [X, Y, Z] = peaks(20); [U, V, W] = surfnorm(X, Y, Z); quiver3(X, Y, Z, U, V, W, 0.5, 'r'); % 箭头长度、颜色 hold on surf(X,Y,Z,'LineStyle','none'); % 网格线不显示 hold off view(0, 90) ...
matlab绘制三维图
Lasso's Blog
09-14 5389
matlab绘制三维图三维曲线 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同。当x,y,z是同维向量时,则x,y,z 对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线
matlab绘图(三)绘制三维图
higerwy的博客
03-10 4万+
曲面图绘制(只需将mesh改为surf即可),这十张图片体现不同的颜色映射风格,标题为对应的colormap的值。对应列元素绘制三维曲线,曲线条数等于矩阵列数。由各划分点分别作平行于两坐标轴的直线,则得到二维矩形区域。surf用于绘制三维曲面图,各线条之间的补面用颜色填充。对于参数形式表示的三维曲线,还可以用简易绘图函数。组成一组曲线的坐标参数,选项的定义和。C(i,j)是Pij的颜色值。1.最基本的绘制三维曲线的函数。等函数就可以把这张曲面出来。映射到曲面上,就得到曲面上的。表示的曲面,通常,先在。
matlab三维波束图
05-09
MATLAB是一款非常好用的科学计算软件,其中包含了丰富的绘图工具,使得我们可以非常方便地绘制各种类型的图形,包括三维波束图。本文将简要介绍如何利用MATLAB绘制三维波束图。 首先,我们需要准备一些数据。三维波束图是一个立体图形,它对应的数据应该是一个三元组(x, y, z),其中x,y分别表示水平和垂直方向的角度,z表示相应角度下的功率。通常情况下,我们可以通过实验或者仿真获取这些数据。 然后,我们需要利用MATLAB自带的绘图函数plot3来绘制出三维波束图。我们可以先利用meshgrid函数生成网格点坐标,然后再利用plot3函数绘制出相应的数据。在绘制波束图的过程中,我们需要注意一些细节,比如选择合适的坐标轴、设置透视效果等等。 最后,我们还可以利用MATLAB提供的一些其他功能来进一步美化我们的三维波束图。比如,我们可以添加标签、标题、图例等等。我们还可以通过调整视角、颜色等参数来增强图形的可读性和美观度。 总的来说,利用MATLAB绘制三维波束图相对来说比较简单,只需要掌握一些基本的绘图技巧即可。当然,如果我们想要绘制更加复杂的三维波束图,我们还需要深入学习MATLAB的绘图函数和及其参数使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Matlab画三维图的一些技巧 18859
  • LaTeX的安装教程 2260

分类专栏

  • LaTeX 1篇
  • Latex排版
  • Matlab常用技巧 1篇

最新评论

  • Matlab画三维图的一些技巧

    晓、零: 这个确实非常多,我主要做的是一些比较麻烦的,每次用都要去查的

  • Matlab画三维图的一些技巧

    晓、零: 这个我想到的办法是你布好点x,y,将布的点满足你约束条件,不满足的去了。然后再画图

  • Matlab画三维图的一些技巧

    lovemerald: 我想问一下MATLAB怎么绘制带有条件限制的三维图?例如x和y都是0到1的数,x<y, 绘制出z=x^3*y^4-x^2*y^4+x^6*y^3的图形

  • Matlab画三维图的一些技巧

    喝饮料闯东北: axis off 可以隐藏坐标轴表情包

最新文章

  • LaTeX的安装教程
2020年2篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

聚圣源公务员自首式举报拿超工资77kk流氓软件卸载yy6080.org猕猴桃面膜美谍入俄记广州硬盘数据恢复dbf文件怎么打开量产u盘文山睡懒觉陆家嘴金融人才公寓侏罗纪公园6.3刘翔的记录碌碌无为的意思卤太太网贷家门返利女孩起名有的意思即日起开始报名商标起名打分测试网球大满贯光大银行股票代码起名网免费取名女51配资查询网校园广播系统男孩起名大全2018属猴鞋店效果图内衣店起名大全集带佳字的免费装饰空间新华社点名鸡西防疫m3u淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化