MATLAB子图标题和轴标签

7
我有以下脚本,最终要绘制一个 4x2 的子图:
files = getAllFiles('preliminaries');

n = size(files);
cases = cell(1, n);
m = cell(1, n);

for i = 1:1:n
    S = load(files{i});

    cases{i} = retransmission_distribution(S);

    c = size(cases{i});
    m{1,i} = cell(1, c(2));

    %figure(i);
    str_size = size(files{i});
    title_str = files{i}(5:str_size(2) - 4);
    title_str = strrep(title_str, '_', ' ');
    %title(title_str);
    for j = 1:1:c(2)
        [x, y] = hist(cases{i}{1,j});
        m{1,i}{1,j} = [x; int32(y)];
        %  subplot(4, 2, j);
        %  xlabel('Number of Retransmissions');
        %  ylabel('Number of Occurrences');
        %  bar(y, x, 'histc');
    end
end

然而,根据我目前的命令顺序,即使将它们取消注释,标题和轴标签也会在一段时间后出现并被删除。我希望这个图形有它自己的标题,并且每个子图都有它自己的轴标签。最简单的解决方法是什么?

4个回答

8

对于轴标签,Matt的观点是正确的,它们必须在调用BAR之后放置。这将解决一个轴标签问题。然而,如果标签太长,你可能会注意到特别是y轴标签可能会相互覆盖。有几个选项可以解决这个问题。首先,你可以在调用YLABEL时调整字体大小:

ylabel('Number of Occurrences','FontSize',7);

其次,您可以使用字符串单元数组而不是单个字符串将一个长标签转换为多行标签:

ylabel({'Number of' 'Occurrences'});

要为整个图形添加标题,最好的选择可能是创建一个UICONTROL静态文本对象,并调整其位置,使其靠近图形顶部。您可以先获取图形的大小和位置,以帮助您将文本框放置在靠近顶部和中心的位置:
figureSize = get(gcf,'Position');
uicontrol('Style','text',...
          'String','My title',...
          'Position',[(figureSize(3)-100)/2 figureSize(4)-25 100 25],...
          'BackgroundColor',get(gcf,'Color'));

这将创建一个静态文本框,宽度为100像素,高度为25像素,放置在图形顶部的中心,并具有与图形相同的背景颜色。


1
之前不知道有多行标签。太赞了! - Jonas
喜欢使用UICONTROL作为标题。顺便提一下,当使用MPGWRITE v6.0(Matlab 2012a)时,它似乎不会出现在电影中。 - Peter D

5

suptitle就是您需要的东西。

它将标题放在所有图表的中心位置。

SUPTITLE Puts a title above all subplots.
    SUPTITLE('text') adds text to the top of the figure
    above all subplots (a "super title"). Use this function
    after all subplot commands.

1
使用此解决方案创建的标题将出现在使用MPGWRITE创建的电影中。 - Peter D
4
请注意,suptitle命令并不包含在基础Matlab中。我认为它是一个我没有的工具箱的一部分。 - Flyto

4

我在 MATLAB 交流论坛上看到过一个解决方案,对于我来说效果很好。创建完图形后,请执行以下命令序列:

set(gcf,'NextPlot','add');
axes;
h = title('Intended Figure Title');
set(gca,'Visible','off');
set(h,'Visible','on');

这是我见过的唯一相对理智的选择,但仍然让我感到困惑:“为什么在一个旨在成为科学语言并广泛用于绘制图形的工具中,这会如此困难?”;-) - Flyto

2
据我所知,title函数是将文本放置在一组坐标轴上的,因此不存在图形标题这样的东西。可能的解决方法包括仅对一个良好放置的子图使用title(例如第一个或顶部行的中间一个),或手动创建一个坐标轴以放置您想要的标题。
至于轴标签,请尝试在条形图命令之后放置标签命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接