标注图以使标注与ylabel在轴外对齐

时间:2019-06-17 03:04:49

标签: matlab plot label alignment subplot

请参见下面的代码,该代码将创建一个带有一些图的2 x 2子图:

x = linspace(0,2*pi);
y = sin(x);
hfig = figure('Position',[1317 474 760 729]);
subplot(2,2,1)
plot(x,y)
ylabel('plot1');
subplot(2,2,2)
plot(x,y.^2)
ylabel('plot2');
subplot(2,2,3)
plot(x,y.^3)
ylabel('plot3');
subplot(2,2,4)
plot(x,abs(y))
ylabel('plot4');

在每个工具中,我都在“工具”中手动添加了标签:编辑图(a)(b)(c)(d),生成该图:

image 1

问题是,如果我调整图的大小,它们将不再与ylabel文本对齐:

image 2

是否可以通过编程方式添加这些标签并使它们自动与ylabel文本对齐?令我惊讶的是,MATLAB还没有内置这样的东西。

谢谢

1 个答案:

答案 0 :(得分:4)

如果不将侦听器附加到图形调整大小事件(请参见example)上,并进行一些与长宽比相关的计算,这不是一件容易的事。

尚不完全清楚您的标签是什么类型的对象(textannotation),因此,我将仅演示如何使用text命令以编程方式执行此操作轴坐标中的标签(与坐标相对)。这不能完全解决问题,但看起来更好,可能达到了可接受的程度:

function q56624258
x = linspace(0,2*pi);
y = sin(x);
hF = figure('Position',[-1500 174 760 729]);

%% Create plots
[hAx,hYL] = deal(gobjects(4,1)); 
for ind1 = 1:3
  hAx(ind1) = subplot(2,2,ind1, 'Parent' , hF);
  plot(hAx(ind1), x,y.^ind1);
  hYL(ind1) = ylabel("plot" + ind1);
end

hAx(4) = subplot(2,2,4);
plot(hAx(4), x,abs(y));
hYL(4) = ylabel('plot4');

%% Add texts (in data coordinates; x-position is copied from the y-label)
for ind1 = 1:4
  text(hAx(ind1), hYL(ind1).Position(1), 1.1, ['(' char('a'+ind1-1) ')'], ...
    'HorizontalAlignment', 'center');
end

enter image description here

请注意您对代码的一些修改:

  • 现在存储了一些用于创建图形元素的函数返回的句柄(主要是:hAxhYL)。
  • 所有创建图形元素(subplotplotylabel)的函数现在都指定了目标(即父对象或容器)。
  • 我更改了图中的'Position',以便它可以在我的设置中使用(您可能需要将其改回)。