Azzera filtri
Azzera filtri

凡例をforループに​より複数作成し,グラ​フに反映させたい

70 visualizzazioni (ultimi 30 giorni)
泰誠 平山
泰誠 平山 il 30 Gen 2023
Modificato: Atsushi Ueno il 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

Risposta accettata

Hernia Baby
Hernia Baby il 30 Gen 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
  1 Commento
泰誠 平山
泰誠 平山 il 31 Gen 2023
ありがとうございました。他のコードにも応用ができそうなのでとても勉強になりました。

Accedi per commentare.

Più risposte (2)

交感神経優位なあかべぇ
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
  1 Commento
泰誠 平山
泰誠 平山 il 31 Gen 2023
回答ありがとうございました。非常に勉強になりました。

Accedi per commentare.


Atsushi Ueno
Atsushi Ueno il 30 Gen 2023
Modificato: Atsushi Ueno il 30 Gen 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 Commento
Atsushi Ueno
Atsushi Ueno il 30 Gen 2023
Spostato: Atsushi Ueno il 30 Gen 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])]
hanrei = 4×6 char array
' 500nm' ' 750nm' '1000nm' '1250nm'
legend(hanrei);

Accedi per commentare.

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!