Plot multiple legend in a loop with variable

3 visualizaciones (últimos 30 días)
Nik Rocky
Nik Rocky el 25 de Jun. de 2020
Editada: Adam Danz el 11 de En. de 2022
Hello
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
addpath(genpath('/home/nikitajarocky/workspace/QT/Software_2.0_QT/IO/'));
i = dir('**/*.mat');
Legends_results = cell(1,length(i));
for p = 1:length(i)
roc_file_name = i(p).name;
load(roc_file_name)
disp(roc_file_name)
for a = 1:length(i)
Legends_results{a}=i(a).name;
f=@(m) repmat(c,1,nnz(Legends_results));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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;
plot(help_x,help_y,'--','Color','g');
xlabel('False discovery rate')
ylabel('True positive rate')
xlim([0 1]);
ylim([0 1]);
set(get(get(gco,'Annotation'),'LegendInformation'),'IconDisplayStyle','off')
end
Thank you in advice!
  4 comentarios
darova
darova el 25 de Jun. de 2020
  • It is possible to choose a color order for plot and legend? So, if I have 3 files for plot and legend, it should be a same color order!?
It's the same color order for sure. To check plot order to check color order
Nik Rocky
Nik Rocky el 25 de Jun. de 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});

Iniciar sesión para comentar.

Respuesta aceptada

Adam Danz
Adam Danz el 25 de Jun. de 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})
end
end
% STEP 2: Specify which handles are included.
legend(h(:,1)); % Only include the 1st column of handles
  7 comentarios
Vlatko Milic
Vlatko Milic el 11 de En. de 2022
I have the same problem but it is a bit more complex. Any idea on how this can be performed on variable names within a table?
Adam Danz
Adam Danz el 11 de En. de 2022
Editada: Adam Danz el 11 de En. de 2022
Instead of using labels={...} you'll use T.Properties.VariableNames where T is your table, assuming the columns of the table were plotted in order.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Graphics Object Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by