2016-08-29 34 views
1

グラフをプロットし、ポイントをマークして凡例をループに書きたい。ループ内でのプロット、マーキング、凡例

labels = {} 
for i = 1: size(error,1) 
    r = plot(handles.axes1,temp(i).time,temp(i).signal); 
    hold (handles.axes1, 'on') 
    a = %find minimum index 
    xmin = temp(i).time(a); 
    ymin = temp(i).signal(a); 
    plot(handles.axes1,xmin,ymin,'ro') 
    labels{end+1} = sprintf('Type : %s, %f,%f',error{i,1}.main(1,1).type,xmin,ymin) 
end 

grid on 
legend(r, labels); 

ラベル付けは機能しません。余分な要素を無視して1番目の要素だけが必要です。方法全体が混乱しているので、私の伝説的な色がプロットのものと一致する場合、エレガントな方法があります。

答えて

4

これを行う別の方法は、DisplayNameキーワードを使用することです。

for i = 1:N_lines 
    %... 
    r(i) = plot(handles.axes1, temp(i).time, temp(i).signal, 'DisplayName', labels{i}); 
    %... 
end 
legend('show') 

これを行う利点は、プロットされたポイントに直接名前を付けることです。デバッグしているときにプロットブラウザに書かれているようにプロットを開くと、プロットされるたびに右ペインのポイントの隣に名前が表示されます。何らかの理由で後でポイントを並べ替える場合に備えて、別のlabels変数を追跡する必要もありません。このようにして、ラベルは常に関連するポイントで移動します。


私はあなたがラベルのセルと legendコマンドを呼び出すとき、とりわけ、それはあなたがまだ変更し、プロットが構築された後、あなたがいない場合でも、それを照会することができることを 'DisplayName'ので、バックフィルすることを追加する必要があります

上記のように明示的に設定します。しかし、私は、この方法が自己文書化であり、より便利であることがわかります。これは、追跡することが少なくて済むためです。

+0

いいアプローチとその良い説明利点。私はプロットの多くの長年のDisplayNameプロパティに気づいたことはありません。新しいトリックありがとう! –

+0

これは私が受け入れている答えを変更する必要がありました。これはよりエレガントで簡単です。 – Aashu10

3

にする必要があります。それは最後のプロットハンドルしか保存していないので、legendと呼ぶと、最後のプロットと最初のラベルを使用することになります。サイドに注意してください、それはあなたのループ変数としてiまたはjを使用しないように、それはMATLABビルトインの名前だとしても、あなたの変数errorに名前を付けないでください。最高だとして

% Create a unique color for each plot 
colors = hsv(size(error, 1)); 

for i = 1:size(error, 1) 
    r(i) = plot(handles.axes1,temp(i).time,temp(i).signal, 'Color', colors(i,:)); 
    %... 
    labels{i} = sprintf('Type : %s, %f,%f',error{i,1}.main(1,1).type,xmin,ymin); 
end 

legend(r, labels) 

+0

しかし、プロットの色はすべて同じです。伝説も含めてすべて青色 – Aashu10

+0

@ Aashu10各プロットを異なる色にする例で更新しました。 – Suever

+0

私は変数としてエラーを使用しませんが、iまたはjをループ変数として使用しないのはなぜですか? – Aashu10

関連する問題