以前,我和很多人一样,总是将数据保存到mat文件中。后来突然发现,如果数据量不大的话,直接将Figure窗口中的图形保存为fig文件是更好的选择。fig文件与一般的图像文件不同,并不是由图像的像素构成,它包含了当前图像的“元数据”,即每条曲线,每种符号的数据。所以,它既是图形文件,也是数据文件。而且,与直接操纵mat文件中存储的数据相比,操纵fig文件中的曲线更加直观方便。
生活中常常遇到这样的情况:需要将相同的数据用不同的方式进行绘制,此时,使用Figure窗口操纵fig文件非常方便。比如,打开一个fig文件,得到如下的图形:
如果需要将曲线横轴的取值由原来的1:299更改为-149:149,可以这样:
选中Figure窗口工具栏的“白色指针”(上图中用红色圈起来的按钮),用它可以选取图像中的各个对象(因为fig文件包含了元数据,因此可以以面向对象的方式操纵图像中的各个元素);
单击蓝色的曲线
回到Command Window,执行
>> h = gco;
获取当前对象(get current object)的句柄,即选中的蓝色曲线的句柄,利用该句柄重新设置曲线横轴的取值:
>> set(h, 'XData', -149:149);
看下图,横坐标取值变成了我们需要的形式。
再来一个例子,在Matlab文档中有一个类似的。有如下一个图像
我们想把横轴改为0, pi/2, pi, 3pi/2, 2pi这样的形式。首先用“白色指针”选中当前的Axes,
获取其句柄
>> h = gco
设置XTick属性
>> set(h, 'XTick',
0:pi/2:2*pi);
横轴变成了下面的样子:
接下来,设置XTickLabel属性,将横轴的数值显示为比较熟悉的形式(关于希腊字母的输入,参见《为了希腊字母》):
>> set(h, 'XTickLabel', {'0',
'π/2', 'π', '3π/2', '2π'});
看下图横轴的效果
字体我们不满意,修改起来并不麻烦,虽然可以用相应的函数进行修改,但GUI非常方便。用“白色指针”在横轴上点击右键,在弹出菜单上选择Font(字体),会弹出一个字体对话框,用该对话框修改字体即可。效果如下:
如果我们还不满意,想要把纵轴的“0”和“1”变成“0.0”,“1.0”,可以进行下面的操作:
>> Y =
arrayfun(@(x)sprintf('%.1f', x), -1:0.2:1, 'UniformOutput',
false)
Y =
'-1.0' '-0.8' '-0.6' '-0.4' '-0.2' '0.0' '0.2' '0.4' '0.6' '0.8' '1.0'
>> set(h, 'YTickLabel', Y);
看看最终纵轴效果
最后看一个操作网格的例子。看下图
上面一副子图中,纵坐标只标注了0 -50 -100,因此,如果打开grid,会相当稀疏,如下
可以试试用
>> grid minor
将网格变密一些
感觉又太密了。解决这个问题不麻烦,使用上面用过的手法即可。首先关掉grid
>> grid off
用“白色指针”选中当前Axes,获取其句柄,设置YTick属性
>> h = gco;
>> set(h, 'YTick', -100:25:0);
再次打开grid,效果就好多了
上面的例子都是我在实际中遇到的。Matlab Figure窗口强大的能力简化了很多操作。以后遇到新的例子还会记录下来。