0

フィギュアに多くの「テキストブロック」(複数行のテキストを「テキストブロック」と呼びます)を追加するためのより良い、よりコンパクトな方法を見つけようとしています。たとえば、次の図を参照してください。

ここに画像の説明を入力してください

この図を生成するために使用したコードは次のとおりです。

x=-4*pi:pi/20:4*pi;
y=cos(x);

% generate positions for the text blocks
[ypos,xpos]=find(ismember(y,max(y))); % finds multiple maxima

% generate random data to be presented
info1=rand(1,numel(xpos));     info2=rand(1,numel(xpos));     info3=rand(1,numel(xpos));

plot(x,y);
ylim([-1.1 1.4])

% generate the "text blocks"
text(x(xpos),ypos+0.3,strcat('A_{',num2str((1:numel(xpos))'),'}=',num2str(info1','%0.1f')),'FontSize',8);    
text(x(xpos),ypos+0.2,strcat('B_{',num2str((1:numel(xpos))'),'}=',num2str(info2','%0.1f')),'FontSize',8);    
text(x(xpos),ypos+0.1,strcat('C_{',num2str((1:numel(xpos))'),'}=',num2str(info3','%0.1f')),'FontSize',8);    
%...
%... etc

文字列変数をセルごとに1行のセル配列として定義することにより、セル配列を使用して複数行のテキスト文字列を追加できることを認識しています。例えば:

 text(x,y,{'line 1' ; 'line 2' ; 'line 3'});

ただし、これにはテキストブロックごとに1行のコードも必要になるため、マルチテキストブロックの場合は解決されません...

私の質問は次のとおり です。これらのテキストブロックを1行に追加する方法はありますか、またはより一般的な意味で、たとえば、それぞれに可変数のテキスト行を持つn個のテキストブロックがある場合はどうでしょうか。

4

1 に答える 1

1

どうですか

pos = num2cell(linspace(.3,.1,3));
lett = num2cell(linspace('A','C',3));

your_text_f_handle = @(ps,lt) ...
    text(x(xpos),ypos+ps,strcat(lt, ... 
    '_{',num2str((1:numel(xpos))'),'}=',... % //REM: old info_i are here
     num2str(rand(1,numel(xpos))','%0.1f')),'FontSize',8);

cellfun(your_text_f_handle ,pos,lett);

まったく同じ出力(テスト済み)が得られ、簡単に拡張できます。

于 2012-12-01T12:25:48.340 に答える