5. 局部放大子图
6. Figure缩放字体问题
hc=colorbar;
set(hc,‘FontSize‘,times*get(hc,‘FontSize‘)) %假设有colorbar,实际上就是另外一个axes,同样设置它的字体
看了这个这里才知道输出格式还可以在Export Setup里设置的,而set(findall(gcf,‘-property‘,‘FontSize‘),‘FontSize‘,12)可以把所有的对象中字体大小都改到12号!
7.legend的Marker,line等的操作
有这样一个情况,曲线太多,用线型来表示是不够的,只能用Marker、颜色结合线型来做。一般杂志还有要求,就是不用彩色也能说明每条曲线的意义,这样就只能用Marker结合线型来做。但是如果杯具的是你的数据点太多,导致marker太多,全画上的话根本看不清了。
解决这个问题最简单的方法是:……哈哈,直接调用现成函数(笔者在原作者的基础上做了一点修订,使之在横坐标和纵坐标范围相差数值上很大时也能用,大家也可以考虑一下log坐标的问题),当在使用legend后再使用这个函数,不会影响legend:
之前自己用的办法其实原理上是一致的,也是用线把不同颜色的曲线画一遍,然后每条曲线少用点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://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