Matlab学习笔记#04

绘图(进阶)
matlab技术支持搜索网站

进阶绘图

二、绘制三维图形

1.绘制三维空间中的曲线图

plot3(X,Y,Z)→根据(X,Y,Z)绘制三维曲线图。
附:属性设置等其他操作与plot相同,不重复介绍。

举例:输入代码

i=-pi:0.1:pi;
x=2.*(sin(i)-sin(2*i)./2);
y=2.*(cos(i)-cos(i).^2);
plot3(x,y,ones(length(i)))

在这里插入图片描述

补充

1).meshgrid()

[X,Y] = meshgrid(x,y)→基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。

举例:输入代码

x = 1:3;
y = 1:5;
[X,Y] = meshgrid(x,y)

在这里插入图片描述
个人理解:
现在有x和y两个数组,想要得到一个新数组,该数组中元素由x和y中元素两两相加的结果组成。显然不能直接x.+y.,此时我们就可以用meshgrid(x,y)生成x和y的副本X和Y后,再X.+Y.就可以得到目标数组。该函数在生成三维曲面图和三维网格图时用到的较多。

2).peaks

peaks →从高斯分布转换和缩放得来的包含两个变量的函数,在演示 mesh、surf、pcolor、contour 等函数中很有用。
在这里插入图片描述

2.绘制三维空间中的曲面图

surf(X,Y,Z)→创建一个三维曲面图,颜色与z即高度成比例。

举例:输入代码

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
C = X; 
surf(X,Y,Z,C)      %带上C表示颜色与C成比例。
colorbar

在这里插入图片描述

3.绘制三维空间中的网格图

mesh(X,Y,Z)→创建一个三维网格图,颜色与z即高度成比例。

举例:输入代码

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
C = X;
mesh(X,Y,Z,C)      %带上C表示颜色与C成比例。
colorbar

在这里插入图片描述

4.绘制等高线图

contour(X,Y,Z)→创建矩阵 X 和 Y,用于在 x-y 平面中定义一个网格。将矩阵 Z 定义为该网格上方的高度。然后绘制 Z 的等高线。
附:
surfc()→同时绘制曲面图和等高线图。
meshc()→同时绘制网格图和等高线图。
contourf()→绘制填充的二维等高线图。

举例:输入代码

[X,Y,Z] = peaks;
contourf(X,Y,Z,'--')
colorbar

在这里插入图片描述

三、绘制动图

1.绘制动画线条

使用 animatedline 函数创建一根动画线条。使用 addpoints(an,x,y) 向 an 指定的动画线条中添加 x 和 y 定义的点。使用 drawnow 进行更新。

举例:输入代码

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,2000);for k = 1:length(x)y = sin(x(k));addpoints(h,x(k),y);drawnow
end

2.制作影片帧并播放

预分配一个数组以存储影片帧。在一个循环中使用getframe函数记录帧。用movie函数播放录制的影片帧。
注:movie 函数使用默认尺寸为 560×420 的图窗,而且不会调整图窗尺寸以适应帧偏大或偏小的影片。要适应其他框架尺寸,您可以重新调整图窗figure大小以适应影片。

举例:输入代码

figure
Z = peaks;
surf(Z)
axis tight manual
ax = gca;
ax.NextPlot = 'replaceChildren';
loops = 40;
F(loops) = struct('cdata',[],'colormap',[]);
for j = 1:loopsX = sin(j*pi/10)*Z;surf(X,Z)drawnowF(j) = getframe;
end
%以上为录制movie(F,1,50)
%以每秒50帧的速度播放F一遍

补充:如何将影片导出

1)导出为视频格式(以AVI为例)

使用VideoWriter创建视频文件,再使用writeVideo将视频数据写入到文件,中间会用到open和close打开/关闭文件。
v = VideoWriter(filename,profile)→filename即文件名,profile即创建的文件格式,默认格式为AVI。
open(v)→打开文件,文件打开后格式便无法再修改。
writeVideo(v,frame)→将影片帧数组frame写入到v。
close(v)→关闭文件,确保数据全部写入。

举例:在三-2的例子中继续输入代码:

v = VideoWriter('test');
v.FrameRate=20;%调整一下视频播放的帧率,此处为20帧/s。
open(v)
writeVideo(v,F)
close(v)

在这里插入图片描述
(这里我转成了gif)

2)导出为图片格式(以GIF为例)

使用imwrite进行写入,具体操作见举例。
什么是颜色图?

举例:在三-1的基础上输入代码

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,200);
nImages = length(x);     %①for k = 1:nImagesy = sin(x(k));addpoints(h,x(k),y);drawnowframe = getframe(gcf);     %②im{k} = frame2im(frame);    %③
end
close%下面这一段代码外加上面的①②③语句可以直接套用:
filename = 'testAnimated.gif'; % 设置文件名
for idx = 1:nImages[A,map] = rgb2ind(im{idx},256);% map 颜色图,什么是颜色图见标题下解释的链接。if idx == 1imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.05);% 'LoopCount',Inf 使动画连续循环。% 'LoopCount' 参数在追加模式下无效,故需要if-else。elseimwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.05);%'WriteMode','append' 选择写入模式为追加写入模式。%'DelayTime',0.05 在每个动画图像显示之间指定了一秒的时滞。end
end

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部