MATLAB Answers

Plot multiple legend in a loop with variable

9 views (last 30 days)
Nik Rocky
Nik Rocky on 25 Jun 2020
Commented: Adam Danz on 28 Jun 2020
In result folder are multiple subfolder with .mat-files (in this example 3)
I want load and print all .mat-files in one plot
Legend should show a .mat-filenames
I tried to make different dancing moves, but it still shows me just one (last filename) and data1 (that I want to remove)
Legends_results =
1×3 cell array
{'001_M1_0.5m_AKG_F1_MS1.mat'} {'002_M1_0.5m_AKG_F1_MS1.mat'} {'003_M1_0.5m_AKG_F1_MS1.mat'}
Help me please to:
  1. plot all names to legend
  2. remove/avoid plot "data1"
my code:
steps_SNR = 1; %%%change
i = dir('**/*.mat');
Legends_results = cell(1,length(i));
for p = 1:length(i)
roc_file_name = i(p).name;
for a = 1:length(i)
f=@(m) repmat(c,1,nnz(Legends_results));
SNR_help = ((length(M)-1)/2)*steps_SNR;
SNR = -SNR_help:steps_SNR:SNR_help;
%figure('Name',' receiver operating characteristic','NumberTitle','on');
hold all
p1 = plot(M(:,2),M(:,1),'--o');
buffer = [.1 .3 .5];
buffer = repmat(buffer,1,ceil(numel(M(:,2))/numel(buffer)));
buffer(numel(M(:,2))+1:end) = [];
[~, ySortIdx] = sort(M(:,2));
buffer(ySortIdx) = buffer;
labelpoints(M(:,2),M(:,1), SNR, 'E', buffer)
hold all
lgd = legend([p1],Legends_results{p},'Interpreter','none','Location','Best');
title(lgd,'Compare AKG and Sony')
hold all
help_x = 0:0.1:1;
help_y = 0:0.1:1;
xlabel('False discovery rate')
ylabel('True positive rate')
xlim([0 1]);
ylim([0 1]);
Thank you in advice!
Nik Rocky
Nik Rocky on 25 Jun 2020
Hey darova,
not really. I was forced to use:
ColorCell{1} = hex2rgb('#0072BD');
ColorCell{2} = hex2rgb('#EDB120');
ColorCell{3} = hex2rgb('#7E2F8E');
hold on
p = plot(M(:,2),M(:,1),'--o','Color',ColorCell{j});

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 25 Jun 2020
I suggest you apply this 2-step approach to your code.
Step 1: Use the DisplayName property of graphics objects to define the legend strings.
Step 2: Use the graphics object handles to specify what is included in the legend.
This example below shows the structure of these two steps.
cla() % clear axes
hold on
n = 6;
h = gobjects(n,3); % used to store the graphics handles
labels = {'aaa' 'bbb' 'ccc' 'ddd' 'eee' 'fff'};
colors = lines(n);
for j = 1:3
for i = 1:n
% STEP 1: use DisplayName
h(i,j) = plot(1:5, rand(1,5)+i-1, '-o', 'Color', colors(i,:), 'DisplayName', labels{i})
% STEP 2: Specify which handles are included.
legend(h(:,1)); % Only include the 1st column of handles

Sign in to comment.

More Answers (0)


Community Treasure Hunt

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

Start Hunting!