从很早的版本开始MATLAB就支持对 patch、surface 等对象设定透明属性,有些示意图也必须使用透明的对象才能充分展示所要表达的含义。对透明对象支持最好的通用图片格式就是 .png 了,但是 png 图像并非矢量图形,对于一些需要以矢量图显示的场合并不适用,比如某些展示超多细节的文档需要不断被放大放大放大,再比如许多期刊就不允许提交 png 格式的附件,只支持 .eps、.tiff、.jpeg 等。
eps (Encapsulated PostScript) 格式是被学术期刊最广泛认可的图片格式,其本身就是为矢量图而设计。遗憾的是 PostScript 作为一个啥都能干的图形学语音,居然直到现在都不支持透明度(transparency)的属性,因此想要让 MATLAB 中的带透明对象图形以 .eps 格式输出,只能依靠一些偏门的手段来曲线救国,比如下面提到的方案就是把透明对象的表观颜色赋给了矢量图,让它看起来像是透明而已。
首先明确一下目标:利用 MATLAB 生成带有透明度属性(FaceAlpha、EdgeAlpha 等)的图形,将其以 .eps 格式输出,且保留 MATLAB 中所展示的透明度特征。先用 peaks 函数生成一个曲面,令其表面透明度为50%:
s = surf(peaks(30))
set(s,'facealpha',0.5);
set(gcf,'color','none');</