15

走る

loglog(x,y);
legend('First script');

最初のスクリプトから。次に、hold on;. 同様の 2 番目のスクリプトを実行します。2 つのグラフが正しく表示されますが、最初の凡例のみです。さまざまなスクリプトから凡例をインクリメントしたいと考えています。

1 つのスクリプトから凡例にどのように追加できますか?

4

5 に答える 5

21

これを行う別の方法として、「DisplayName」と呼ばれるものがあります。

hold all
for ind=1:3
x=[0:0.1:10];
plot(x, sin(x)+ind, 'DisplayName',['sin + ' num2str(ind)]);
end
legend(gca,'show')

どこからでもどんな軸にもプロットするときにこのプロパティを使用してください:)

ダイナミックレジェンドなど、さらに多くのことが可能です!

詳細については、これを参照してください:文書化されていない matlab の動的な凡例

編集

スクリプトを実行するたびに凡例を更新する必要があります。動的な凡例を使用するか、legend('off'); だけでこれを行うことができます。伝説('ショー')

于 2013-10-17T08:21:56.283 に答える
2

最も簡単な方法は次のとおりです。

hold all;
p1=plot(1:10,1:10);  
legend(p1,'1');  % in this way plot(x,y) is saved as variable p1 with name '1'   
p2=plot(1:10,11:20); % different data set

legend(p2,'2');  
legend(gca,'off');    
legend('show');

これはいくつかのメソッドの接続であり、非常にシンプルでどこでも使用できます。

于 2015-04-29T12:19:00.427 に答える
1

私は同様の問題を抱えていました:最初に3セットの実験データをプロットし、次にパラメータ推定に入って関数をシミュレートし、実験データを保持しながら毎回モデルデータをプロットしたいと考えていましたが、前回の実行からモデルデータを削除しました. そして、伝説がそれを示したかったのです。さまざまな質問からの解決策を組み合わせてそれを行うことができました。

初期コマンド (メインの上部)

close allプロットが毎回新たに開始されるようにします

最初のプロット(私のメイン)

plot(points,expdata1,'ro','DisplayName','Experimental, L= 0.1 m'); hold on
plot(points,expdata2,'bo','DisplayName','Experimental, L= 0.2 m'); 
plot(points,expdata3,'go','DisplayName','Experimental, L= 0.3 m');   
legend('-DynamicLegend','Location','Best')
drawnow
h_old=plot(0,250);

drawnowプロットをすぐに描画するように強制し、h_old後で使用する単なる「プレースホルダー」です。データの範囲内にあるため、0,250 を選択しました (そうしないと、軸が台無しになります)

2 番目のプロット (呼び出された関数内)

h(1)=plot(points,modeldata1,'r-','DisplayName','Model Data, L= 0.1 m');
h(2)=plot(points,modeldata2,'b-','DisplayName','Model Data, L= 0.2 m'); 
h(3)=plot(points,modeldata3,'g-','DisplayName','Model Data, L= 0.3 m');
delete(h_old);
h_old = h;
drawnow

削除h_oldして、作成した新しいプロットで上書きします。そうすれば、2回目の反復で2回目の反復からのプロットがプロットされ、1回目のプロットが削除され、これらの操作の後、プロットが表示されます(再びdrawnow)。

于 2014-12-15T11:11:35.753 に答える
0
plot(x,y);
legend('y');

hold on;
plot(x,z);
hold off;

% Now add a new item to the legend

h = legend();
newleg = h.String;
newleg{end+1} = 'z';
legend(newleg);
于 2015-03-12T18:02:38.033 に答える