Название подзаголовка MATLAB и метки осей

У меня есть следующий сценарий, чтобы в конечном итоге построить 4 на 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

однако с текущим порядком последовательности команд у меня есть, даже с ними незафиксированными, метки заголовка и оси присутствовали некоторое время, прежде чем быть стерты. Я хочу, чтобы фигура имела свой собственный заголовок, причем каждый подзаголовок имеет свои собственные метки оси. Как это проще всего исправить?

4 ответов


для меток оси Мэтт правильно о том, что они должны быть помещены после вызов бар. Это позаботится о один проблема метки оси. Однако вы, вероятно, заметите, что ваши метки оси y, в частности, могут быть записаны друг на друга, если они слишком длинные. У вас есть несколько вариантов, чтобы исправить это. Во-первых, вы можете настроить размер шрифта в вызове YLABEL:

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

второй, вы можете преобразовать одну длинную метку в многострочную метку с помощью массив ячеек из строк вместо одной строки:

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

чтобы добавить заголовок ко всей фигуре, лучший вариант, вероятно, сделать элементов графического интерфейса статический текстовый объект и отрегулируйте его положение так, чтобы он был помещен в верхней части рисунка. Вы можете получить размер и положение фигуры первым, чтобы помочь вам разместить текстовое поле в верхней и центр:

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 пикселей, расположенное в центре верхней части рисунка и с тем же цветом фона, что и рисунок.


вот решение, которое я видел на форуме MATLAB exchange некоторое время назад, и это сработало для меня довольно хорошо. После создания рисунка выполните следующую последовательность команд:

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

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.

насколько я знаю, функция заголовка помещает текст относительно набора осей, поэтому нет такой вещи, как заголовок фигуры. Возможные обходные пути включают использование заголовка только для хорошо размещенного подзаголовка (например, первого или среднего из верхней строки) или ручное создание набора осей в том месте, где вы хотите свой заголовок.

Что касается меток оси, попробуйте поместить команды метки после команды bar.