How to adjust legend

5 views (last 30 days)
Paul Hinze
Paul Hinze on 10 Aug 2021
Commented: Paul Hinze on 11 Aug 2021
I would like to name all legends with a colored line, instead of only data1 and so on.
Furthermore i would like to exclude the legends with a triangle.
My code for the legend was:
legend('show')
  2 Comments
Scott MacKenzie
Scott MacKenzie on 10 Aug 2021
Edited: Scott MacKenzie on 10 Aug 2021
It might help if you post the code that generated the figure in your question.
Paul Hinze
Paul Hinze on 10 Aug 2021
Edited: Walter Roberson on 11 Aug 2021
Indeed:
%%%%% ---- Plot loudness --- %%%%%
% Build nested for loop that iterates through each subject with their
% corresponding sounds:
% Make new figure and place on screen Breite/Höhe
hFig = figure( 2 );
set( hFig, 'Position', [400, 300, 1250, 700], 'Name', 'Loudness Curves');
% Define papersize for export
set( hFig, 'paperunits','centimeters','Paperposition',[ 0 0 10 4])
% Set Names of subjects:
names = {'Subject 1 Old','Subject 2 Old','Subject 3 Young','Subject 4 Young',...
'Subject 5 Young','Subject 6 Young','Subject 7 Young','Subject 8 Young'};
% Set 14 different colors:
C = {'b',[0 0.4470 0.7410],[0.3010 0.7450 0.9330],'c',[0.6350 0.0780 0.1840],'r',[0.8500 0.3250 0.0980],...
[0.9290 0.6940 0.1250],'m','k','g',[0 0 .2],[0 .1 .4],[.1 .2 .3]};
for i = 1:length(fn_subjects)
subplot(3,4,i)
for k = 1:length(fn_sound)
sounds = (vas_cell{i,1}.loudness(k).Sound);
level = (vas_cell{i,1}.loudness(k).Intensity);
vas = (vas_cell{i,1}.loudness(k).VAS);
subplot(3,4,i)
plotHandles = zeros(1,k);
hold on
plotHandles(k) = plot (level,vas,'color',C{k}, 'Linewidth',1,...
'DisplayName', 'Breaking Glass',...
'DisplayName', 'Car Horn',...
'DisplayName','Clapping');
title(names{i})
xlim([60 100])
xlabel('Level / dB SPL', 'FontSize', 12)
ylabel('Visual Analog Scale', 'FontSize', 12)
set(gca, 'FontSize', 12)
grid on
tone = AbsorbanceMEMR.(fn_subjects{i}).(fn_sound{k});
[FreqBand, Levels] = size(tone);
for j = 1:length(level)
maximum = max ( abs (tone(2:5,j)));
if maximum >= 0.03
plot(level(j), vas(j),'k^','MarkerSize',6)
end
end
end
sgtitle('Loudness')
end
lgd = legend('Breaking Glass','Car Horn','Clapping');
lgd.Position(1) = 0.375;
lgd.Position(2) = 0.235;
lgd.NumColumns = 8;
title(lgd, 'Sounds')

Sign in to comment.

Answers (2)

Star Strider
Star Strider on 10 Aug 2021
I am not certain what you want, however the approach in Specify Legend Labels During Plotting Commands (using the 'DisplayName' name-value pair) could be appropriate.
.
  10 Comments
Star Strider
Star Strider on 11 Aug 2021
It seems Walter saw this before I did (sleeping) so I will not proceed further.
I could not run your code since I do not have the necessary data, and that makes it difficult to determine an appropriate solution. The best I could do was to refer to what were likely the most appropriate parts of the documentation, and then let you experiment with it.
.
Paul Hinze
Paul Hinze on 11 Aug 2021
I know, its not a problem. In general the idea was good, and I mean it was late.
It is always cool to get help from you guys. I really appreciate it.

Sign in to comment.


Walter Roberson
Walter Roberson on 11 Aug 2021
plotHandles(k) = plot (level,vas,'color',C{k}, 'Linewidth',1,...
'DisplayName', 'Breaking Glass',...
'DisplayName', 'Car Horn',...
'DisplayName','Clapping');
Only the last 'DisplayName' option in a plot() call with have any effect, even if the call is generating multiple lines.
You also really only want a summary legend, not a legend for each subplot. The easiest way to handle that is to fake it.
%%%%% ---- Plot loudness --- %%%%%
% Build nested for loop that iterates through each subject with their
% corresponding sounds:
% Make new figure and place on screen Breite/Höhe
hFig = figure( 2 );
set( hFig, 'Position', [400, 300, 1250, 700], 'Name', 'Loudness Curves');
% Define papersize for export
set( hFig, 'paperunits','centimeters','Paperposition',[ 0 0 10 4])
% Set Names of subjects:
names = {'Subject 1 Old','Subject 2 Old','Subject 3 Young','Subject 4 Young',...
'Subject 5 Young','Subject 6 Young','Subject 7 Young','Subject 8 Young'};
% Set 14 different colors:
C = {'b',[0 0.4470 0.7410],[0.3010 0.7450 0.9330],'c',[0.6350 0.0780 0.1840],'r',[0.8500 0.3250 0.0980],...
[0.9290 0.6940 0.1250],'m','k','g',[0 0 .2],[0 .1 .4],[.1 .2 .3]};
for i = 1:length(fn_subjects)
subplot(3,4,i)
for k = 1:length(fn_sound)
sounds = (vas_cell{i,1}.loudness(k).Sound);
level = (vas_cell{i,1}.loudness(k).Intensity);
vas = (vas_cell{i,1}.loudness(k).VAS);
hold on
plot (level,vas,'color',C{k}, 'Linewidth',1);
title(names{i})
xlim([60 100])
xlabel('Level / dB SPL', 'FontSize', 12)
ylabel('Visual Analog Scale', 'FontSize', 12)
set(gca, 'FontSize', 12)
grid on
tone = AbsorbanceMEMR.(fn_subjects{i}).(fn_sound{k});
[FreqBand, Levels] = size(tone);
for j = 1:length(level)
maximum = max ( abs (tone(2:5,j)));
if maximum >= 0.03
plot(level(j), vas(j),'k^','MarkerSize',6)
end
end
end
sgtitle('Loudness')
end
for K = 1 : 3
plotHandles(K) = plot(nan,nan,'color', C{K});
end
lgd = legend(plotHandles, {'Breaking Glass','Car Horn','Clapping'});
lgd.Position(1) = 0.375;
lgd.Position(2) = 0.235;
lgd.NumColumns = 8;
title(lgd, 'Sounds')
  1 Comment
Paul Hinze
Paul Hinze on 11 Aug 2021
Thank you for your help!
Now I maged to implement the code! And it works :)

Sign in to comment.

Categories

Find more on Data Distribution Plots in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!