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:loops
    X = sin(j*pi/10)*Z;
    surf(X,Z)
    drawnow
    F(j) = getframe;
end
%以上为录制

movie(F,1,50)
%以每秒50帧的速度播放F一遍

补充:如何将影片导出

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

使用VideoWriter创建视频文件,再使用writeVideo将视频数据写入到文件,中间会用到openclose打开/关闭文件。
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:nImages
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow
    frame = getframe(gcf);     %②
    im{k} = frame2im(frame);    %③
end
close

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值