MATLAB Answers

グラフの凡例をfor文を使って全て反映したい。

7 views (last 30 days)
添付のデータの1列目の文字違いでグラフで色分けし、凡例も反映したいです。
グラフの色分けはfor文を使って下記の要領で分けてできました。
ただ、凡例を反映したいのですが、どうしても最後の文字(C)だけしか反映されません。
添付のデータであれば凡例は'A','B','C'となるようにしたいです。
どのようなコードになるか教えていただけないでしょうか。
よろしくお願いいたします。
Data = readcell("質問用.xlsx")
Lot = Data(:,1)%1列目だけ抜き取り
Data1 = (Data(:,2))%2列目だけ抜き取り
Lot1 = unique(Lot, 'rows')%1列目の文字被りを削除(文字の数を確認するため)
Lot2 = length(Lot1)%文字が何個あるか確認
for c = 1 : Lot2
Lot_{c} = contains(Lot,Lot1{c})%1列目の同じ文字を確認
Lot1_{c} = find(Lot_{c}==1)%1列目の同じ文字の行数を確認
Lot1_first_{c} = Lot1_{c}(1)%1列目の各文字の最初の行数を確認
Lot1_last_{c} = Lot1_{c}(end)%1列目の各文字の最後の行数を確認
plot(Lot1_first_{c}:Lot1_last_{c},cell2mat(Data1(Lot1_first_{c}:Lot1_last_{c})),'.',"MarkerSize",30)
legend()%←添付のデータあれば凡例は'A','B','C'となるようにしたい。
end

Accepted Answer

Hernia Baby
Hernia Baby on 16 Sep 2021
table型で読み込んでいます
file = '質問用.xlsx';
Data = readtable(file)
Data = 8×2 table
Var1 Var2 _____ ____ {'A'} 1 {'A'} 2 {'A'} 3 {'B'} 4 {'B'} 5 {'C'} 6 {'C'} 7 {'C'} 8
ここで凡例となる名前を取ります
name = unique(Data.Var1)
name = 3×1 cell array
{'A'} {'B'} {'C'}
プロットします
for i = 1:length(name)
n1 = name{i};
names = string(Data.Var1);
plot(Data.Var2(names==n1),'o-')
hold on
end
legend(name);
  1 Comment
丈太郎 森川
丈太郎 森川 on 16 Sep 2021
legend(name)←これで出来ました。ありがとうございました。
今後ともよろしくお願いいたします。

Sign in to comment.

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 16 Sep 2021
足りないのはhold onです。
% 途中まで省略
hold on;
legend()%←添付のデータあれば凡例は'A','B','C'となるようにしたい。
end

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!