figure(1)刚画完,figure(2)一出来把figure(1)的内容覆盖了,回去看代码发现两个figure调用之间没加hold off,第二条plot直接在第一个图上接着画了。加一句close all在最前面,每个figure后面配clf,画之前清干净,不然后面的图叠在前面的上面。D:\Matlab_work\plot_scripts\basic_setup.m 里存着标准模板。
图形句柄这个东西用顺了效率翻倍。f = figure('Position',[100 100 800 600]),f就是窗口句柄,ax = gca返回当前坐标轴句柄,h = plot(x,y)返回曲线句柄。后面改属性不用重新画,set(h,'LineWidth',2,'Color','r')一次改完。想批量操作的时候,hs = findobj(gca,'Type','line')拿到所有曲线句柄,循环设属性。以前改个线宽要重新plot一遍,数据都读两遍,现在直接改句柄,数据不用重读。D:\Matlab_work\plot_scripts\handle_demo.m 里写了几个句柄操作的例子。
坐标轴的范围和刻度用axis和xticks配合。axis([0 10 -5 5])一次设完四个边界,xlim和ylim分开设也行。刻度用xticks(0:2:10),标签用xticklabels({'0','2','4','6','8','10'}),中间想跳过某个刻度就把那个值从xticks里删掉。网格grid on,主次网格都开用grid minor。坐标轴字体用set(gca,'FontSize',12,'FontName','Arial'),论文里中文用宋体或黑体,代码里设成SimSun或者SimHei,线宽设0.75到1磅,打印出来清楚。D:\Matlab_work\plot_scripts\axis_setup.m 里记着论文格式的参数。
图例位置用legend的Location参数调,'northeast'是默认的右上角,'best'让Matlab自己找空白最多的角落。图例框的边框用legend('boxoff')去掉,背景透明用legend('Color','none')。图例的字体和线宽跟着坐标轴走,不用单独设。多曲线图例顺序跟plot的顺序一致,plot(a)、plot(b)、plot(c),legend('a','b','c'),顺序反了图例跟曲线对不上,查的时候看颜色和线型。
如图。

双纵轴用yyaxis left和yyaxis right。左边画完调用yyaxis right,右边的坐标轴属性单独设,颜色跟左边的曲线颜色对应,蓝色曲线配蓝色轴,红色配红色,读图的时候不用来回看图例。右边的ylim和yticks单独设,跟左边完全独立。两个轴都画完之后,ax.YAxis(1)和ax.YAxis(2)分别改各自的属性,Color、FontSize、TickDirection都分开。D:\Matlab_work\plot_scripts\yyaxis_demo.m 里有个扭矩和转速的双轴图,左轴扭矩右轴转速。
子图用subplot(2,2,1)这种位置参数,或者tiledlayout(2,2)建一个布局对象,nexttile跳到下一个格子。tiledlayout的好处是自动对齐,subplot有时候格子之间的间距不均匀。每个tile的坐标轴属性单独设,gca返回当前tile的句柄。共享轴用linkaxes([ax1 ax2],'x'),两个子图的x轴联动,缩放一个另一个跟着动,对比不同工况的同一变量的时候省事。
保存图片用exportgraphics,比saveas清楚。exportgraphics(gcf,'D:\Matlab_work\out\fig1.png','Resolution',600),600DPI的PNG插进Word里放大不糊。矢量图用exportgraphics(gcf,'fig1.pdf','ContentType','vector'),PDF放大无限清晰。老版本用print(gcf,'-dpng','-r600','fig1.png'),效果一样。保存之前把背景设成白色,set(gcf,'Color','w'),不然默认的灰色背景打印出来费墨。D:\Matlab_work\plot_scripts\export_setup.m 里存着几个导出参数的模板。
中文字体乱码的时候,代码里设了FontName但显示出来还是方框,系统的字体缓存没刷。重启Matlab,或者换一个肯定有的字体,SimHei和SimSun在Windows上都有。Linux上字体少,先fc-list | grep -i sim看有没有,没有的话装一个或者改用文泉驿。LaTeX解释器用'Interpreter','latex',数学符号像\alpha、\beta这些直接写,不用Unicode字符。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删