请参见下面的代码,该代码将创建一个带有一些图的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),生成该图:
问题是,如果我调整图的大小,它们将不再与ylabel文本对齐:
是否可以通过编程方式添加这些标签并使它们自动与ylabel文本对齐?令我惊讶的是,MATLAB还没有内置这样的东西。
谢谢
答案 0 :(得分:4)
如果不将侦听器附加到图形调整大小事件(请参见example)上,并进行一些与长宽比相关的计算,这不是一件容易的事。
尚不完全清楚您的标签是什么类型的对象(text
或annotation
),因此,我将仅演示如何使用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
请注意您对代码的一些修改:
hAx
,hYL
)。 subplot
,plot
,ylabel
)的函数现在都指定了目标(即父对象或容器)。'Position'
,以便它可以在我的设置中使用(您可能需要将其改回)。