【问题标题】:MATLAB subplot title and axes labelsMATLAB 子图标题和坐标区标签
【发布时间】:2010-08-10 23:56:33
【问题描述】:

我有以下脚本来最终绘制 4 x 2 子图:

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

但是,按照我当前的命令序列顺序,即使它们未注释,标题和轴标签在被删除之前也存在了一段时间。我希望该图有自己的标题,每个子图都有自己的轴标签。最简单的修复方法是什么?

【问题讨论】:

    标签: matlab label plot figure


    【解决方案1】:

    对于轴标签,Matt is correct 必须将它们放在 调用 BAR 之后。这将解决 one 轴标签问题。但是,您可能会注意到,如果您的 y 轴标签太长,它们最终可能会相互重叠。你有几个选项来解决这个问题。首先,您可以在调用YLABEL时调整字体大小:

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

    其次,您可以使用cell array of strings 而不仅仅是单个字符串,将一个长标签转换为多行标签:

    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 像素的静态文本框,放置在图形顶部的中心,背景颜色与图形相同。

    【讨论】:

    • 不知道多行标签。整洁!
    • 喜欢使用 UICONTROL 作为标题。仅供参考,当使用 MPGWRITE v6.0 (Matlab 2012a) 时,它似乎没有出现在电影中。
    【解决方案2】:

    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 创建的电影中。
    • 请注意,suptitle 命令包含在基本 matlab 中。我认为这是我没有的工具箱的一部分。
    【解决方案3】:

    这是我不久前在 MATLAB 交流论坛上看到的一个解决方案,它对我非常有效。创建图形后,执行以下命令序列:

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

    【讨论】:

    • 这是我见过的唯一一个理智的选择,但它仍然让我继续“在设计为科学语言并广泛用于绘制图表的东西中,为什么这么难?” ;-)
    【解决方案4】:

    据我所知,title 函数相对于一组轴放置文本,因此没有图形标题之类的东西。可能的解决方法包括仅将标题用于放置良好的子图(例如第一个或顶行的中间),或在您想要标题的位置手动创建一组轴。

    至于轴标签,请尝试将标签命令放在 bar 命令之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2012-06-24
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      相关资源
      最近更新 更多