matlab有用小工具

http://blog.sina.com.cn/s/blog_59cf672601015qmm.html

目录:

1.使图形窗口的默认text解释器为latex

2.图形窗口最大化

3.双坐标

4.计时

5.局部放大子图

6.Figure缩放字体

7.legend的Marker,line的属性操作(多legend,曲线减少marker数)

8.eps图片在latex中显示不全

9.坐标轴被遮住、保存后消失

10.使用一个目录下的全部或某类文件

11. [原创]eps图片中使用隐含信息做标注

12. 生成高质量透明矢量图

13. imagesc中对nan的处理

14. 数据量比较大时保存真矢量eps图

15. 坐标轴在图形中最大化

16. eps图嵌入字体

1.使当前图形窗口的默认text解释器为latex:

set(gcf,‘DefaultTextInterpreter‘,‘latex‘)

同理可推广:

set(0,‘DefaultTextInterpreter‘,‘latex‘)

但是legend的解释器似乎不受这个设置影响?(可以用‘Interpreter‘,‘latex‘来设置,但是感觉还是不爽。)

2.使图形窗口最大化:

set(gcf,‘outerposition‘,get(0,‘screensize‘))

3.双坐标

[hax,hl1,hl2]=plotyy([x1,y1,x2,y2],[x3,y3]);

这将在左边的坐标轴里画两条曲线(x1,y1)和(x2,y2),而右坐标轴画一条(x3,y3)

对于坐标轴的一些设置可以通过返回值来进行操作

set(gcf,‘CurrentAxes‘,hax(1))//把当前坐标轴调成左边的坐标轴

set(gca,‘Ylabel‘,‘xxxx‘)//然后就可以正常操作这个坐标轴,也可以使用hold on,增加曲线

4.计时

t0 = cputime; 程序;time=cputime-t0;

tic; 程序;toc;

t0 = clock; 程序;time = etime(clock, t0);

5. 局部放大子图

有一个mmzoom的扩展,可以用鼠标选区域来放大,用起来也挺好,不过不利于精确控制。

其实,要自己画子图也不难:

myzoom([0.18,0.18,0.4,0.3],[x0,x1,y0,y1])

通过笔者自己写的简单函数来实现放大:

function myzoom(position,axiscale)

ha=get(gcf,‘CurrentAxes‘);

ha1=copyobj(gca,gcf);

set(ha1,‘position‘,position)

set(gcf,‘CurrentAxes‘,ha1)

axis(axiscale)

xlabel(‘‘)

ylabel(‘‘)

set(gcf,‘CurrentAxes‘,ha)

其中position是字图在当前图中的相对位置和大小,[x0,x1,y0,y1]是你要放大的坐标范围。

6. Figure缩放字体问题

让字体随figure的比例随你设置的缩放比例而变:

hf=figure;

fp=get(hf,‘position‘);

times=2.0; %自定义缩放倍数,

set(hf,‘position‘,[0 0 times*fp(3:4)]) %figure的缩放

set(gca,‘FontSize‘,times*get(gca,‘FontSize‘)) %gca上各种字体的缩放

xlabel(‘X‘) %label在gca的fontsize设定之后写,不用再单独去设置它的字体

ylabel(‘Y‘)

hc=colorbar;

set(hc,‘FontSize‘,times*get(hc,‘FontSize‘)) %假设有colorbar,实际上就是另外一个axes,同样设置它的字体

参考:http://blog.csdn.net/benjmzhu/article/details/7246870

看了这个这里才知道输出格式还可以在Export Setup里设置的,而set(findall(gcf,‘-property‘,‘FontSize‘),‘FontSize‘,12)可以把所有的对象中字体大小都改到12号!

7.legend的Marker,line等的操作

有这样一个情况,曲线太多,用线型来表示是不够的,只能用Marker、颜色结合线型来做。一般杂志还有要求,就是不用彩色也能说明每条曲线的意义,这样就只能用Marker结合线型来做。但是如果杯具的是你的数据点太多,导致marker太多,全画上的话根本看不清了。

解决这个问题最简单的方法是:……哈哈,直接调用现成函数(笔者在原作者的基础上做了一点修订,使之在横坐标和纵坐标范围相差数值上很大时也能用,大家也可以考虑一下log坐标的问题),当在使用legend后再使用这个函数,不会影响legend:

"nummarkers.m" http://pan.baidu.com/share/link?shareid=1072992811&uk=151290240

之前自己用的办法其实原理上是一致的,也是用线把不同颜色的曲线画一遍,然后每条曲线少用点Marker再画一遍,这样涉及到legend怎么展示,就是要对legend的线型、颜色进行自定义。

x=0:0.0001:2*pi;

y1=sin(x);y2=cos(x);

figure

hold on

box on

n=1000;

hl(1)=plot(x(1:n:end),y1(1:n:end),‘rd‘);

hl(2)=plot(x(1:n:end),y2(1:n:end),‘go‘);

lstr={‘sin(x)‘,‘cos(x)‘};

plot(x,y1,‘r‘)

plot(x,y2,‘g‘)

[hleg chleg hplot hlabel]=legend(hl,lstr,‘location‘,‘southwest‘);%hplot,hlabel在R2013a里可以用~代替

set(chleg,‘linestyle‘,‘-‘)

比较不解的是对chleg里包含的对象分别操作的时候:比如set(chleg(1),‘linestyle‘,‘.-‘),这样的操作用get(chleg(1))来看是正常的,但是图上却没有反应!!!

参考:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/96754

http://www.mathworks.com/matlabcentral/answers/49027

还有一个比较巧的方法:

http://blog.sciencenet.cn/blog-43412-45936.html

8.eps图片在latex中显示不全的问题。
表现为eps图片用latex插入,会显示不全,出现在pdf里面看到的图是一部分被截掉的情况。
原因在于eps图片papersize的设置得太小,图片超过了paper的范围。
(笔者也不太明白bounding box和papersize各是什么,在matlab里面还有paperposition设置,这个和bounding box是对应的么?papersize设成A0,但是打印出来的图却是紧凑的,尺寸并不是这个papersize啊!)。
这里给笔者使用命令的解决方案:
set(gcf,‘PaperType‘,‘A0‘)
set(gcf,‘PaperPositionMode‘,‘auto‘)
print(‘filename‘,‘-depsc‘);
根据matlab的帮助文件,最好在设置PaperTyper前设置一下PaperUnit。当然PaperSize是可以自己设置的(PaperType给了几个默认设置而已:http://en.wikipedia.org/wiki/Paper_size#C_series)。
set(gcf, ‘PaperUnits‘, ‘inches‘);
set(gcf, ‘PaperSize‘, [5 7]);
参考:
http://blog.sciencenet.cn/blog-533656-428329.html
http://blog.renren.com/share/236157660/13151799720
http://nibot-lab./73290.html

http://blog.sciencenet.cn/blog-471076-381288.html
http://blog.sina.com.cn/s/blog_618af1950100jipf.html

9.坐标轴被遮住、保存后消失

set(gca,‘Layer‘,‘top‘) %坐标轴被遮

set(gca,‘LineWidth‘,2) %保存成png图片后坐标轴消失了,可能是由于坐标轴太细造成的(困扰我许久,比如用patch设置透明后坐标轴消失,用pcolor后坐标轴消失)

10. 使用目录下的所有或一类文件

files=dir(‘*.txt‘);

for i=1:length(files)

a=load(files(i).name);

end

注意linux下直接用dir命令会得到所有文件和目录(files.isdir=1),目录中还会含有当前目录“.”和上级目录“..”。

自己写的话,linux下可以考虑用system命令结合regexp(str,‘\t+\s+‘,‘split‘),还是挺麻烦,不如直接用dir的方便。

11. [原创]eps图片使用隐含信息标注

因为eps图片开头有一些信息描述文件名、标题、创建者等信息,所以我们可以把一些不需要在图形中显示但是又需要的信息全部放到eps文件隐含的注释信息里面。(这样信息不会轻易随文件名更改而改变。这有没有让你想到基因序列里面的外显子和内含子呢?说不定人类的基因里的内含子还真是创造者植入的注释或者后门呢,哈哈。。。)

那么怎么放进去呢?其实eps是基于文本的,把它当文本文档打开就能进行编辑!那么在matlab里的话,怎么做呢?把要写的信息放到一个字符串中,然后在eps文件中替换或添加部分注释信息!

目前还不怎么熟悉matlab的字符串替换操作,所以目前我只放一个Linux系统中用系统的sed命令来添加信息的例子:

info=‘Hello, World!‘;

eval_r([‘!sed -i ‘‘s/\(\%\%Title.*\)/\%\%‘,info,‘/g‘‘ test.eps‘])

这样,用图片查看器打开后,查看文档的“属性”时,你就可以看到它的标题这一项变成了“Hello, World!”。

12. 生成透明高质量矢量图(未完全测试)

12.1 色图里如何把含有NaN的数据设置成白色,并保证输出图的质量。

http://www.mathworks.com/matlabcentral/newsreader/view_thread/140607

这里面第3个是最好的办法,虽然复杂一点,但是能够保证数据显示正确,而且输出的图体积小质量好。

pcolor或set(h,‘alphadata‘,~isnan(C))的方法,都会因为设置了透明而使生成的eps图片即大又质量不好:坐标轴丢失、文字锯齿。

12.2 三维图

http://www.mathworks.com/matlabcentral/newsreader/view_thread/158841

print -depsc2 -painters test3.eps可以解决部分三维图输出质量不高的问题,但是输出有透明数据的图时会有问题?

12.3 透明图

http://www.myoutsourcedbrain.com/2009/07/produce-print-quality-figures-from.html

13 imagesc对nan的处理(有空再考虑完美解决办法)

为什么MATLAB不在imagesc中直接默认颜色为白色呢?

pcolor是这样的,imagesc却不一样,怎么考虑的?不能理解!

13.1 现成可用的m文件,设置成任意颜色:

https://gist.github.com/zertrin/5553630

13.2 最简单的一句(如果你保存成eps图片,可能会发现这是一场悲剧):

h=imagesc(C)

set(h,‘alphadata‘,~isnan(C))

13.3 自己做色标,把nan转化一下:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/33744

14 数据量比较大时保存真矢量eps图

matlab遇到比较大的数据量时,即使想保存为eps矢量图,实际给出来的却是伪矢量图,先当成位图做了一个转换,然后再输出为eps图。这样保存的eps图片,一是质量差,二是其中的文字插入到latex中已经不能编辑了。

使用下面的方法保存的不会有问题:

print(gca,‘-depsc2‘,‘painters‘,filename)

参考:http://stackoverflow.com/questions/8280971/matlab-and-high-quality-eps-figures

(这里还有一个扩展export_fig文件和savesvg文件,貌似很强大,没有尝试)

15. 坐标轴在图形中最大化
tightInset = get(gca, ‘TightInset‘);
position(1) = tightInset(1);
position(2) = tightInset(2);
position(3) = 1 - tightInset(1) - tightInset(3);
position(4) = 1 - tightInset(2) - tightInset(4);
set(gca, ‘Position‘, position);
saveas(h, ‘WithoutMargins.pdf‘);
来源地址:http://stackoverflow.com/questions/5150802/how-to-save-a-plot-into-a-pdf-file-without-a-large-margin-around

16. eps图嵌入字体

export_fig文件很有用,可以解决eps字体嵌入问题:

http://btstream.is-programmer.com/posts/24988.html

其它解决方案:

http://blog.sina.com.cn/s/blog_a3b1929c0100zh5b.html

时间: 2024-11-04 06:35:42

matlab有用小工具的相关文章

这些小工具让你的Android 开发更高效

在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vysor Vysor 是一个可以将手机的屏幕投影到电脑上,当然也可以操作,当我们做分享或者演示的时候,这个工具起到了作用. Vector Asset Android Studio 在1.4 支持了VectorAsset,所谓VectorAsset:它可以帮助你在Android 项目中添加Materia

Android Studio添加Parcelable序列化小工具(快速提高开发效率)

Android Studio添加Parcelable序列化小工具(快速提高开发效率) Android Studio是google专门为开发Android提供的开发工具,在它内部可以直接的添加一些非常好用的开发小工具,这里就讲解怎样添加这些小工具,并且向大家推荐一个非常有用的对象传递时,必须要把对象序列化的接口Parcelable小工具; 这里先介绍下 Android中实现序列化的两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是An

【开源一个小工具】一键将网页内容推送到Kindle

最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zhanjindong/SimpleSendToKindle 功能:Windows下一个简单的将网页内容推送到Kindle的工具. 写这个工具的是满足自己的需求.自从买了Kindle paperwhite 2,它就成了我使用率最高的一个电子设备.相信很多Kindle拥有者和我一样都有这样一个需求:就是白

Android 开发小工具之:Tools 属性 (转)

Android 开发小工具之:Tools 属性 http://blog.chengyunfeng.com/?p=755#ixzz4apLZhfmi 今天来介绍一些 Android 开发过程中比较有用但是大家又不常用的小工具.这些小工具可以提高 Android 应用开发的效率.还可以提高代码质量.所以还是有必要使用的. 首先介绍布局文件中的 tools 属性. 如果你用 Android Studio 创建一个简单的示例项目,在生成的布局文件中会有这么一行内容: xmlns:tools="http:

Win10能更逆天?17款系统增强小工具推荐

1让Win10变得更逆天的增强工具合集(一)回顶部 10月1日微软发布了新一代操作系统Win10的技术预览版,里面展出了很多项与桌面用户有关的改进.应该说到目前为止,网友们的评价还是比较正面的.但笔者想说的是,作为微软战略版图中比较重要的一项,如此简单的几项变化就定义为一次跨版本更新,还是显得略微草率了些.事实上在很多用户心中,对于Windows的期盼一直未减,正所谓高手在民间,我想下面几款软件或许能给微软带来一些思考! 图01 Win10这样你造么? 1.Mission Control ——

软件仓库、模版机制、小工具和搜索

软件仓库 我越来越喜欢软件仓库的方式了. 这意味着大量自由的软件被存放一个中央软件仓库中,只要加以正确的配置和标识,就可以自动从中央仓库中下载所需的软件和工具,再也不用像在Windows 下面四处寻找,耗费时间了. 也许 Windows 用户从来不觉得, 过去的我也从来没有意识到, 在网上搜索软件. 注册码,是一件多么耗费时间和生命的事情!因为当时我们都被这种心理所蒙骗: 看! 收费软件啊, 我现在终于可以免费使用了!所花费的几十分钟,甚至几小时,都算值了! 软件仓库体现的是一种分享共筑的理念.

Windows 桌面边栏小工具开发入门

      准备为网站做一个桌面通知功能的工具,现在网上一般是html5+js的比较多.虽然html5+js现在是web的开发主流,但是我们应用一般是windows系统.并且应使用中,需要打开谷歌或其它的浏览器,这个很麻烦.       在百度中找到一个windows的DesktopTools看以很好用,用来分析了一下.在网上下载http://www.uzzf.com/soft/53006.html 一个小工具.按照http://blog.csdn.net/mrxyz098/article/de

Redis相关的小工具:redis-load、redis-stat

redis-load.redis-stat是Redis作者antirez写的两个小工具,其中: redis-load是Redis的一个压力测试工具 redis-stat是Redis的状态监控工具 相关代码见:https://github.com/antirez/redis-tools 1 下载代码 $ git clone https://github.com/antirez/redis-tools.git 2 编译 $ cd redis-tools $ make all 3 redis-load

matlab的fda工具使用方法

MATLAB中用FDATool设计滤波器及使用 该文章讲述了MATLAB中用FDATool设计滤波器及使用. 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool.具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool. 2. 在fdatool工具中应该注意的几个问题:(a)Fstop(阻带截止频率)不能大于或等于采样频率Fs/2,这是由于数字滤波器设计的方式决定的.(b)将设计好的滤波器