Заголовок MATLAB и метки осей - PullRequest
7 голосов
/ 11 августа 2010

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

8 голосов
/ 11 августа 2010

Для меток осей, Мэтт правильный о том, что они должны быть размещены после вызова 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 пикселей.в центре верхней части фигуры и того же цвета фона, что и фигура.

4 голосов
/ 23 февраля 2013

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.
4 голосов
/ 21 сентября 2012

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

set(gcf,'NextPlot','add');
axes;
h = title('Intended Figure Title');
set(gca,'Visible','off');
set(h,'Visible','on');
2 голосов
/ 11 августа 2010

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

...