matlab 图的标注文字,科学网-Matlab画图(二):动画及文字标注-周建锋的博文

俗话说“一图胜千言”。在报告中用动画来展示一些关键性内容,可以收到更好的效果,也更能吸引观众的注意力。在这里,我们介绍如何用Matlab生成一些简单的动画,以及如何在画面中添加文字标注。

(一)Matlab与动画

Matlab中与动画有关的内容可以分为四个部分,分别是:1、生成动画;2、播放动画;3、保存动画;4、将动画转化为GIF文件。

1、生成动画

基本的动画是由一帧帧静态画面组成的。在Matlab中生成动画的步骤并不复杂:在指定的窗口画出一帧帧画面,然后每一帧静态画面保存到一个对象列表中。基本步骤如下:初始化一个画图窗口。例如:

fig = figure('Position',[100,100,1200,600]);

用一个循环在窗口中画一帧帧静态图画,然后用getframe()函数将画面保存到对象列表M中。例如:

forii=1:FM

subplot(1,2,1);

% Draw light curves here.

.......   % Codes of drawing are listed here.

subplot(1,2,2);

% Draw the spectrum of the signal.

.......   % Codes of drawing are listed here.

% Save the frame

M(ii) = getframe(fig);

end

2、播放动画

在生成动画的过程中,每一帧画面所用的时间长短不一,往往看不出实际的动画效果。因此,完成动画之后,我们可以用Movie()函数将动画按设定的参数播放出来,看看实际的效果。下面是一个实际的代码例子:

closeall;   % 关闭现有的画图窗口。

[h, w, p] = size(M(1).cdata);% 获得动画的尺寸。

hf = figure('Position',[100 100 w h]);  % 生成一个新的图像窗口,用来显示动画。

movie(hf,M,1,30);   % 按每秒30帧的速度播放动画1次。

3、保存动画

动画的保存使用Matlab内置函数movie2avi()。例如:

movie2avi(M,'Noiseless.avi','compression','None');

其中M为前面生成的动画对象;第2个参数为文件名;第3、4个参数用来选择视频的压缩格式,在Windows操作系统中可以使用‘Indeo5’压缩格式,最后生成文件尺寸较小,而在Unix和MacOS下面只能使用‘None’,即无压缩格式,生成的文件尺寸比较大。

4、将动画转化为GIF文件

movie2avi()生成的是AVI格式视频文件,需要用专门的软件才能播放。为了能够在网页或PPT报告中直接显示动画,我们建议将动画转化为GIF文件。这里,我们从网上收集了一个能将AVI视频转化为GIF文件的Matlab程序avi2gif(),放在附录中。该程序使用交互式用户界面,使用起来相当方便。

Noiseless.gif

图1:示例动画。显示一段时间序列信号及其频谱。

(二)Matlab中图像的标注

正如上面的示例动画所显示的那样,有时候我们需要在图像中标注一些文字,以便于读者理解图像的内容。在Matlab中可以使用内置函数annotation()。annotation()可以有多种文字、图形标注方式,下面例举其中的“文字标注”和“文字加箭头标注”进行说明。

1、文字标注

str ='x(t) = Sin(2pi*F1*t)+Sin(2pi*F2*t)';

annotation('textbox', [.18 .8, .1, .1],'string', str,'fontsize', 20,...

'color','m','edgecolor','none');

在这段代码中,[.18 .8 .1 .1]为文字的在窗口中的绝对位置,所使用的是绝对坐标,[0 0]表示绘图区域的左下角,[1 1]表示绘图区域的右上角。显示效果参考图1中的左图。在这里,因为X坐标的范围不断在变化,因此使用绝对坐标比较方便。

2、文字加箭头标注

[ax1,ay1] = dsxy2figxy(gca, XFreq1, YFreq1);

strf1 = ['F1='num2str(Freq1)];

strf2 = ['F2='num2str(Freq2)];

har1 = annotation('textarrow',ax1,ay1,'color','m',...

'fontsize', 20,'String', strf1,'textcolor','m','linewidth', 2);

[ax2,ay2] = dsxy2figxy(gca, XFreq2, YFreq2);

har2 = annotation('textarrow',ax2,ay2,'color','m',...

'fontsize', 20,'String', strf2,'textcolor','m','linewidth', 2);

在这段代码中,显示了两个“文字加箭头”标注,其效果参见图1中的右图。在这里为了标注方便,我们输入的是相对坐标(XFreq1,YFreq1),但是annotation()函数只支持绝对坐标,因此,我们需借助Matlab中一个坐标转化函数dsxy2figxy()将相对坐标转化为绝对坐标。必须注意的是这个函数并不是Matlab内置函数,使用前需用命令"addpath([docroot '/techdoc/creating_plots/examples'])"将相关的目录导入至Matlab的命令搜索路径。

附录:

转载本文请联系原作者获取授权,同时请注明本文来自周建锋科学网博客。

收藏

分享

分享到:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值