web-dev-qa-db-ja.com

MATLABサブプロットのタイトルと軸のラベル

最終的に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

ただし、現在のコマンドシーケンスの順序では、コメントが付けられていなくても、タイトルと軸のラベルは消去される前にしばらくの間存在していました。フィギュアに独自のタイトルを付け、各サブプロットに独自の軸ラベルを付けたいと思います。それを修正する最も簡単な方法は何ですか?

7
stanigator

軸ラベルの場合、 マットは正しい それらを配置する必要があることについて[〜# 〜] bar [〜#〜] 。これで、one軸ラベルの問題が解決されます。ただし、特にy軸ラベルが長すぎると、互いに上書きされる可能性があることに気付くでしょう。これを修正するには、いくつかのオプションがあります。まず、呼び出しのフォントサイズを [〜#〜] ylabel [〜#〜] に調整できます。

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

次に、単一の文字列の代わりに 文字列のセル配列 を使用して、1つの長いラベルを複数行のラベルに変換できます。

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ピクセルの静的テキストボックスが作成されます。

8
gnovice

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
Mahesh

これは、しばらく前にMATLAB交換フォーラムで見た解決策であり、それは私にとって非常にうまくいきました。図を作成した後、次の一連のコマンドを実行します。

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

私の知る限り、タイトル関数は一連の軸を基準にしてテキストを配置するため、図のタイトルなどはありません。考えられる回避策には、適切に配置されたサブプロット(最初のサブプロットや一番上の行の中央のサブプロットなど)にのみタイトルを使用するか、タイトルが必要な場所に軸のセットを手動で作成することが含まれます。

軸ラベルについては、barコマンドの後にlabelコマンドを入れてみてください。

2
Matt Mizumi