如何格式化用 plotyy 制作的 Matlab 图形?

How to format Matlab figures made with plotyy?

我正在使用 Matlab 制作绘图,并希望使用演示文稿导出样式导出它们(文件 > 导出设置 > 导出样式 > 加载设置:"Presentation")。这通常足以满足快速需求。

但是我现在使用plotyy出现了如下问题。当我 select Presentation Export Style 并将其应用于图形时,在某些情况下,Y 轴标签会超出图片区域。似乎 Matlab 没有适当地缩放所有内容以适应图中 window。我该如何解决这个问题(尽可能简单)?

例子

下面是上述问题的示例:

x = linspace(0,1,10);
y1 = 1000*x;
y2 = 10*x.^2;
figure; ax = plotyy(x,y1,x,y2);
ylabel(ax(1),'y_1');
ylabel(ax(2),'y_2');

现在,如果您将 Presentation Export Style 应用到此,您就会明白我在说什么。

我不知道它是否特定于版本:现在使用 2015a。

借助 excaza 在 this SO question 上的回答,我设法找到了一个非常简单的解决方案:

设置轴的 ActivePostionPropertyouterposition 需要在格式化图形之前发生。它将确保所有内容都适合 window。这很可能会使两个轴框错位。然后应执行此工作示例的最后五行以使它们再次相等并保持图中的适当拟合 window.

x = linspace(0,1,10);
y1 = 1000*x;
y2 = 10*x.^2;
figure;
ax = plotyy(x,y1,x,y2);
xlabel('x')
ylabel(ax(1),'y_1');
ylabel(ax(2),'y_2');

% Set `ActivePostionProperty` to `outerposition`. This will make sure
% everything fits within the window
set(ax,'ActivePositionProperty','outerposition')

% Do some formatting......
% either with GUI or code.

% It is likely that the two axes get shifted and no longer coincide. Then
% execute this part.
p1 = get(ax(1),'Position');
p2 = get(ax(2),'Position');
p = max(p1,p2);
p(3:4) = min(p1(1:2)+p1(3:4),p2(1:2)+p2(3:4))-p(1:2);
set(ax,'Position',p);