Adding legend in a plot genereted by a loop
이전 댓글 표시
Hello everyone
i have a lot of x,y data sets that i would like to plot. The data sets are stored in a cell structure so that
- DataFiles(1,1) is the first data set i imported
- DataFiles(1,2) is the second
- DataFiles(1,1).data(:,2) is all the y values of the first data set
and so on. the names of the data sets are furthermore stored in OutFiles so that
- OutFiles(1,1).name is the name of the first data set
- OutFiles(2,1).name is the name of the second data set
and so on. because i would like to plot all the x,y data set togehter i wrote a loop. the code is shown below
figure( 'Name', 'Reduced data' );
title('Reduced Raw data')
cc = jet(length(OutFiles)); % creates colormap
% log-lin plot
subplot(2,1,1)
h1 = subplot(2,1,1);
set(h1, 'xscale', 'lin')
set(h1, 'yscale', 'log')
xlabel('Q (Å^{-1})','fontsize',14)
ylabel('Detector counts in 1 sec.')
hold on
for k = 1:length(OutFiles)
plot(DataFiles{1,k}.data(:,1),DataFiles{1,k}.data(:,2), 'color', cc(k,:));
end
+ the other subplot which is just a log-log plot of the same
My problem is that i cannot figure out how i can include the legends in the plot. i have tried include "legend" in the loop so that the loop code becomes
for k = 1:length(OutFiles)
plot(DataFiles{1,k}.data(:,1),DataFiles{1,k}.data(:,2), 'color', cc(k,:));
legend(OutFiles(k,1)
end
but this does not work. Simply adding legend(OutFiles) also does not work but OutFiles also contains more information than ".name". i thought about making an array of the names "Legend(1,length(OutFiles))" but i do not know how to make an array of strings. i tried using
>> Legend=zeros(1,10); >> Legend(1,8) = 'test' Subscripted assignment dimension mismatch.
but as you can see i cannot add a string to an array
does anyone have a suggestion on how to add legends to plots made using a loop? any help will be greatly appreciated :)
댓글 수: 1
mazari ahmed
2015년 8월 12일
l want to make a legend for my figure but l have 3 for loops with three plots like mentioned below : legend 1 : essential legend 2 : less essential legend 3 : most important
for P=1:K
% body
plot(.....,'bo');
end
for Z=N:T
%body
plot(....,'ro'):
end
for i=1:L
%body
plot(....,'ko'):
end

how can l manage my legend ? thank you
채택된 답변
추가 답변 (1개)
Samuel Hammarberg
2019년 5월 30일
When I loop through folders etc. containing data I want to plot, I usually use the 'DisplayName' option.
Example of what my plotscripts typically includes.
% This script plots force vs displacement stored in the Data struct.
figure, hold on
h = legend('show','location','best');
set(h,'FontSize',12);
for i=1:length(Data) % Data is a struct containing my data.
x = Data(i).displacement;
y = Data(i).force;
name = Data(i).name; % Some text string which i usually take from the folder of each data set in Data.
plot(x,y,'-x','LineWidth',2,'MarkerSize',2,'DisplayName',name)
end
카테고리
도움말 센터 및 File Exchange에서 Legend에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!