凡例をforループにより複数作成し,グラフに反映させたい
96 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
泰誠 平山
am 30 Jan. 2023
Bearbeitet: Atsushi Ueno
am 1 Feb. 2023
下記コードにおいて横軸にX、縦軸にyの1~4列を取った場合の4種類のグラフを1つのグラフに表示させると同時に,小さい順に500nm,750nm,1000nm,1250nmといった名前の凡例をforループにより表示させたいです。しかし現状は添付のように凡例が表示されておりません。お手数をおかけしますがこのコードの作成例をご教授願いたいです。よろしくお願いいたします。
clear;
x=0:2:20;
X=x(:);
y=zeros(length(X),4);
for i=1:length(x)
y(i,1)=2*X(i,1);
y(i,2)=3*X(i,1);
y(i,3)=4*X(i,1);
y(i,4)=5*X(i,1);
end
for k=1:4
plot(X,y(:,k))
formatspec="%d%s";
A1=500+250*(k-1);
A2='nm';
hanrei=sprintf(formatspec,A1,A2);
legend(hanrei)
hold on
end
hold off
0 Kommentare
Akzeptierte Antwort
Hernia Baby
am 30 Jan. 2023
なるべくコンパクトにしました
clear,clc,close all;
アポストロフィ( ' )で縦にできます
X=(0:2:20)';
行列を作成します
n = 4;
y = (2:n+1).*X;
%{
以下のループと同じ
y=zeros(length(X),n);
for jj = 1:n
y(:,jj)=(jj+1)*X;
end
%}
図示します
ここだけは for ループにしました
Displayname オプションを使い、最後にlegendで一気に表示します
figure
hold on
for kk = 1:n
num = 500+250*(kk-1);
txt = [num2str(num),'nm'];
plot(X,y(:,kk),'Displayname',txt)
end
hold off
legend show
Weitere Antworten (2)
交感神経優位なあかべぇ
am 30 Jan. 2023
DisplayNameを使用した凡例の記述方法の例も記載しておきます。
clear;
x=0:2:20;
X=x(:);
y=zeros(length(X),4);
for i=1:length(x)
y(i,1)=2*X(i,1);
y(i,2)=3*X(i,1);
y(i,3)=4*X(i,1);
y(i,4)=5*X(i,1);
end
for k=1:4
formatspec="%d%s";
A1=500+250*(k-1);
A2='nm';
hanrei=sprintf(formatspec,A1,A2);
plot(X,y(:,k),'DisplayName',hanrei);
hold on
end
legend;
hold off
Atsushi Ueno
am 30 Jan. 2023
Bearbeitet: Atsushi Ueno
am 30 Jan. 2023
clear;
x=0:2:20;
X=x(:);
y=zeros(length(X),4);
for i=1:length(x)
y(i,1)=2*X(i,1);
y(i,2)=3*X(i,1);
y(i,3)=4*X(i,1);
y(i,4)=5*X(i,1);
end
for k=1:4
plot(X,y(:,k))
formatspec="%d%s";
A1=500+250*(k-1);
A2='nm';
hanrei=sprintf(formatspec,A1,A2);
if k == 1 % 追記ここから
h = legend(hanrei); % 最初だけ凡例を追加。残りはこの凡例に文字列を追加していく
else
str = get(h,'String'); % 凡例の文字列をゲット
str{end} = hanrei; % 追加分(デフォルト名'data1'等)を変更
set(h,'String',str); % 凡例の文字列をセット
end % 追記ここまで
hold on
end
hold off
1 Kommentar
Atsushi Ueno
am 30 Jan. 2023
Verschoben: Atsushi Ueno
am 30 Jan. 2023
既存の凡例に新たな項目を追加するのはちょっとやっかいなんです。まとめて1回で描画するなら簡単です。
x = (0:2:20)';
y = repmat(x,[1,4]).*[2 3 4 5];
plot(x,y);
A1 = 500:250:1250;
A2 = 'nm';
hanrei = [num2str(A1') repmat(A2,[4,1])]
legend(hanrei);
Siehe auch
Kategorien
Mehr zu Legend finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!