3

我正在使用subplot其中包含三个不同的图。每个地块都有自己的标签和标题。
问题是我必须在保存情节时最大化情节。否则,文本将相互重叠。
当我最大化它时,即使我使用 ESP 格式或任何矢量格式,子图的标签文本在图像中也会显得有点模糊。
我该如何解决这个问题?

4

5 回答 5

5

对于标题重叠问题,您可以使用字符串元胞数组作为 title() 的输入参数来生成多行标题文本:

title_text = {'first line', 'second line', 'third line'};
title(title_text);

它也适用于标签文本。

于 2013-05-23T20:31:12.563 回答
2

我不确定你的标签为什么模糊,但我可以帮助解决重叠问题。

subplot当我想保存图像时(例如,用于纸张),我从不使用。我所做的是单独创建每个轴,这样可以对每个轴进行更多控制。

下面是一个相当通用的示例,它说明了如何生成任意轴网格,并且对它们的位置进行比子图允许的更精细的控制。当然,只有 3 个轴,你并不真的需要循环,但我相信你可以调整它来满足你的需要。

% first create the figure
figPos = [200 200 800 500];
figure('Color', 'w', 'Position', figPos)

% next, determine how much padding you want on each side of the axes, and in
% between axes. I usually play around with these, and the figure size until
% the layout looks correct.

leftPadding = 50/figPos(3); % the space at the left of the figure
rightPadding = 25/figPos(3); % the space at the right of the figure
horizPadding = 80/figPos(3); % the space between axes (horizontally)
topPadding = 30/figPos(4); % the space at the top of the figure
bottomPadding = 50/figPos(4); % the space at the bottom of the figure
vertPadding = 120/figPos(4); % the space between axes (vertically)

% set up the grid size
nHorizAxes = 2;
nVertAxes = 3;

% figure out how big each axes should be
horizPlotSpace = 1-leftPadding-rightPadding-(nHorizAxes-1)*horizPadding;
vertPlotSpace = 1-topPadding-bottomPadding-(nVertAxes-1)*vertPadding;
width = horizPlotSpace/nHorizAxes;
height = vertPlotSpace/nVertAxes;

myAxes = zeros(nVertAxes, nHorizAxes);

% create some sample data to plot for illustrative purposes
x = linspace(0, 2*pi);
y = sin(x);

for iRow = 1:nVertAxes
    for iCol = 1:nHorizAxes
        % calculate the position
        left = leftPadding+(iCol-1)*(width+horizPadding);
        bottom = bottomPadding+(iRow-1)*(height+vertPadding);
        position = [left bottom width height];

        myAxes(iRow, iCol) = axes('Position', position);
        plot(x, y)
        xlabel('Test Label')
        ylabel('Test Label')
        title(sprintf('axes(%d, %d)', iRow, iCol))
    end
end
于 2013-05-23T21:30:58.197 回答
2

除了大光的回答,如果你想让你的标题和标签在同一行,你可以改变字体大小

a = axes;
t = title('My Really Long Title');
l = xlabel('My Really Long x label')
set(t, 'FontSize', 8)
set(l, 'FontSize', 8)
于 2013-05-23T20:38:56.457 回答
0

这些答案应该会有所帮助,但根据重叠文本的原因,这里还有一些其他的尝试:

更改图形的大小,以便为文本留出空间。例如:

set(gcf, 'PaperSize', [5 7])

更改子图的大小。

s = get(gca, 'Position');
set(gca, 'Position', [s(1), s(2), s(3), s(4) * 0.5])
于 2013-05-23T21:09:21.453 回答
0

axes在使用该函数设置当前坐标区后,MATLAB (R2021b) 似乎停止更新子图的大小。以下代码导致标题被截断。

sp1 = subplot(2, 1, 1);
sp2 = subplot(2, 1, 2);

axes(sp1) % Set the current axes to the first subplot.
title(sprintf('Hello\nCruel\nWorld'))

另一方面,如果title在打开第一个子图后立即调用,而不使用axes,则标题有足够的空间完全可见。

sp1 = subplot(2, 1, 1);
title(sprintf('Hello\nCruel\nWorld'))
sp2 = subplot(2, 1, 2);

作为一种解决方法,如果您需要为先前的子图设置值,您可以简单地sp1作为所需函数的第一个参数传递。

sp1 = subplot(2, 1, 1);
sp2 = subplot(2, 1, 2);
title(sp1, sprintf('Hello\nCruel\nWorld'))
于 2021-10-27T23:35:04.723 回答