凡例をforループにより複数作成し,グラフに反映させたい
115 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
下記コードにおいて横軸に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 commentaires
Réponse acceptée
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
Plus de réponses (2)
交感神経優位なあかべぇ
le 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
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
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])]
legend(hanrei);
Voir également
Catégories
En savoir plus sur Legend dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!