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

115 vues (au cours des 30 derniers jours)
泰誠 平山
泰誠 平山 le 30 Jan 2023
Modifié(e) : Atsushi Ueno le 1 Fév 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

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (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 commentaire
泰誠 平山
泰誠 平山 le 31 Jan 2023
回答ありがとうございました。非常に勉強になりました。

Connectez-vous pour commenter.


Atsushi Ueno
Atsushi Ueno le 30 Jan 2023
Modifié(e) : Atsushi Ueno le 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 commentaire
Atsushi Ueno
Atsushi Ueno le 30 Jan 2023
Déplacé(e) : Atsushi Ueno le 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])]
hanrei = 4×6 char array
' 500nm' ' 750nm' '1000nm' '1250nm'
legend(hanrei);

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

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

Start Hunting!