走る
loglog(x,y);
legend('First script');
最初のスクリプトから。次に、hold on;
. 同様の 2 番目のスクリプトを実行します。2 つのグラフが正しく表示されますが、最初の凡例のみです。さまざまなスクリプトから凡例をインクリメントしたいと考えています。
1 つのスクリプトから凡例にどのように追加できますか?
これを行う別の方法として、「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'); だけでこれを行うことができます。伝説('ショー')
最も簡単な方法は次のとおりです。
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');
これはいくつかのメソッドの接続であり、非常にシンプルでどこでも使用できます。
私は同様の問題を抱えていました:最初に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
)。
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);