matlab gmt,科学网—在Matlab中调用GMT画图 - 徐逸鹤的博文

GMT(Generic Mapping Tools)是由Paul Wessel和Walter Smith开发的一款开源的绘图软件。它使用命令行生成ps或者eps文件。GMT的常用命令包括psbasemap,psxy,grdimage,pstext等,可以在linux和Windows下使用。Matlab是MathWorks开发的数学软件,使用以矩阵作为基本数据类型,集算法开发、数值计算和数据可视化为一体的高级语言。使用Matlab可以方便地处理数据,文件等,也可以画图,但是Matlab生成的图不是很美观,通常需要进一步的修饰。而GMT可以绘制高质量的图件,但是需要事先生成所需的文件。

为了解决这一问题,我们在Windows使用Matlab将GMT画图的命令写入一个批处理文件中,然后使用Matlab的system命令运行该批处理文件,生成.ps文件。然后可以用system命令调用ghostview等软件打开.ps文件,查看绘制结果。

这是我使用Matlab生成批处理文件的第一段。% write .bat file for GMT

batfile = 'Fig4_Matlab_GMT.bat';

epsfile = 'Fig4_Matlab_GMT.ps';

fid = fopen(batfile,'w');

fprintf(fid, [ ...

'@echo offrn', ...

'set file1=Ricker.datrn', ...

'set file2=RickerDeriv.datrn', ...

'set file3=ur000000.1_00001000_00000030.datrn', ...

'set tfile3=theo_ur000000.1_00001000_00000030.datrn', ...

'set ps=%srnrn', ...

'gmt set MAP_FRAME_PEN thinrn', ...

'gmt set MAP_TITLE_OFFSET 8p MAP_LABEL_OFFSET 8prn', ...

'gmt set FONT_ANNOT_PRIMARY 12p FONT_TITLE 12p FONT_LABEL 12prn', ...

'gmt set PS_CHAR_ENCODING Standard+rnrn', ...

'set pat=0.4821rn'

], epsfile);

这是最后一段

fprintf(fid,[ ...

'echo :convert to epsrn' ...

'gmt ps2raster -Te -P %%ps%%rn' ...

]);

fprintf(fid,'del gmt.*rn');

fclose(fid);

system(batfile); % 运行Fig4_Matlab_GMT.bat

system(['gsview32 ', epsfile, '&']); % 调用gsview32打开Fig4_Matlab_GMT.ps

注:对于fprintf函数来说,%%->%,rn->回车,\->

使用Matlab生成批处理文件的好处是:

(1)方便使用%f或%e设置GMT命令需要的参数;

(2)随时使用dlmwrite或csvwrite等命令生成GMT需要的临时性文件,弥补Windows下echo命令的不足;

(3)实现运行批处理文件和查看ps文件的自动化。

目前存在的问题,GMT命令错误的提示没有显示在Matlab中,不能直接地检验GMT命令执行是否有误。Matlab向文件输出的命令略微有些繁琐。不过瑕不掩瑜,在Matlab中调用GMT画图仍是一个很好的方法。

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

链接地址:http://blog.sciencenet.cn/blog-725052-850807.html

上一篇:与拖延症的战斗(2)——了解我们的“时间”

下一篇:世界的方向掌握在少数“疯子”手中