在Matlab中使用两个独立的轴进行绘图

本文对在Matlab环境中绘制图形的人很有用。

在准备用于在科学期刊和各种报告中发表文章的图表时,我经常遇到需要建立多条曲线的情况,每条曲线都与它的轴相关-以便不使图表过载文章,也不会超出其限制。 但是为此,在Matlab R2014a之前的版本中,只有绘图团队(X1,Y1,X2,Y2)具有许多令人不愉快的功能,这使得必须使用其他程序并手动执行所有操作,这首先使该过程变得复杂了。从单一样式的角度来看,其次,它需要很多时间,其次,它不允许快速更改。

令人不愉快的功能和说明
对于这些令人不快的功能,我将其归因于:

1.缺少保持类似物(“ native” 保持不正确,对pallyy无效)。 为了添加两条以上的曲线,您需要使用以下构造:

[hAx,hLine1,hLine2] = plotyy([x1',x2'],[y1' y2'],[x3',x4'],[y3',y4']); % 4  

此设计带来了不愉快的特征2:

2.放在方括号中的数组的尺寸必须匹配,因为 由它们形成元素的矩阵。 实际上,这种情况很少发生。

3.设计受到严重困扰,因为您不能以编程方式更改一行中所有行的颜色和类型,只能格式化与特定轴(hLine1和hLine2)相关的一组行-在任何情况下,我都不能。 同时,我不是在谈论手动更改参数,即 在“图”窗口中进行编辑-仅直接使用.m文件中的代码进行编辑。

总结以上内容:plotyy()不太适合显示不同轴的多组图形。 除非像这样的简单依赖项:

 x = linspace(0,10); y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*cos(10*x); y3 = 0.2*exp(-0.5*x).*cos(10*x); y4 = 150*exp(-0.05*x).*sin(x); X=[x',x']; Y1=[y1' y4']; Y2=[y2',y3']; [hAx,hLine1,hLine2] = plotyy(X,Y1,X,Y2); 



出现在Matlab R2014a版本中的yyaxes团队。 现在我们在这里可以转身了。

我想用我自己的例子告诉你这个团队的乐趣。 任务是,我需要在一张图上建立与右轴相关的3个温度曲线(通过直接数值方法,矩量法和实验值获得的解)和与左轴相关的3个压力曲线。 并添加箭头和标题。

使用yyaxis leftyyaxis right命令可以一次处理此任务。 实际上,本质是什么。 在一个图形中,我们可以通过将它们链接到其中一个轴来构建任意数量的图形。 在每个团队的框架内,所有工作均与常规时间表相同。

在这种情况下,图片的结构如下所示:

 figure() {     - , } yyaxis left { ,     - , , ,       } yyaxis right { ,     - , , ,       } 

结果是,用必要的填充此结构:



程式码
 %     h = figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]); %  : F='Times New Roman'; FN='FontName'; FS='FontSize'; l=30;%   set(gca, FN, F, FS, l) box on %  hold on %%   yyaxis right hPlot_1 = plot(time*10^6, T); %    hPlot_2 =plot(time_exp_T*10^6, T_exp); %   hPlot_3 =plot(time_pk, T_pk); %   set( hPlot_1, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_2, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'o' ); set( hPlot_3, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([180 270]); %     () yticks([190 200 210 220 230 240 250 260 267]) yticklabels({'190', '200', '210', '220', '230', '240','250' '260', '\it T, K'}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   yyaxis left hPlot_10 = plot(time_P*10^6, P_p0); %    hPlot_11 = plot(time_exp_P_p0*10^6, P_p0_exp); %   hPlot_13 = plot(time_pk, Pp0_pk); %   set( hPlot_10, 'LineWidth', 3, 'LineStyle', ':', 'Color', 'k' ); set( hPlot_11, 'LineWidth', 1, 'LineStyle', 'none', 'Color', 'k', 'Marker', 'x' ); set( hPlot_13, 'LineWidth', 3, 'LineStyle', '--', 'Color', 'k' ); %    () ylim([0.1 0.8]); %     () yticks([0.2 0.3 0.4 0.5 0.6 0.7 0.77]) yticklabels({'0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '\it p/p_0 '}) %   set(gca,'xcolor','k'); set(gca,'ycolor','k'); %%   %      xticks([0 20 40 60 80 100 120 140 160 185]) xticklabels({'0' '20' '40' '60' '80' '100' '120' '140' '160', '\it X/U, c'}) %  text(20,0.3,'\leftarrow', FS, 60, FN, F); text(140,0.6,'\rightarrow', FS, 60, FN, F); text(160,0.24,'1', FS, l, FN, F); text(60, 0.25,'2', FS, l, FN, F); text(120, 0.2,'3', FS, l, FN, F); text(140,0.51,'4', FS, l, FN, F); text(80, 0.52,'5', FS, l, FN, F); text(120,0.48,'6', FS, l, FN, F); text(5,0.75,'\it D_2O - N_2', FS, l, FN, F); hold off 



准备要打印的图形的另一个附加功能是可以简单方便地保存为Matlab支持的任何格式。 为此,您只需要添加以下几行:

 %%   file_name = strcat('T, p_p0 - mm, ch, exp'); %   saveas(h, file_name, 'bmp'); %  .bmp saveas(h, file_name, 'fig'); %  .fig saveas(h, file_name, 'eps'); %  .eps saveas(h, file_name, 'jpeg'); %  .jpeg close(h); %     


总结

从版本R2014a开始,Matlab已成为适合准备在各种科学期刊上发表文章的时间表的程序。 一个重要的优点是此工具具有很好的灵活性,使您可以处理结果并以易于消化和美观的形式(包括所谓的结果)呈现结果。 “批处理”处理。

值得一看:

关于Matlab图表有用文章
yyaxis说明

plotyy的描述
导出图表

Source: https://habr.com/ru/post/zh-CN403763/


All Articles