Specify wich values appear on a plot legend
조회 수: 10 (최근 30일)
이전 댓글 표시
I'm plotting in a for loop a series of signals and additionally lines to separate segments in the plot. I want to add a Legend for each of the signal but when I add the legend it adds the lines too and Im not really sure how to take the lines out of the Legend.
My code is:
for j=1:8
figure(j)
for i=1:6
plot(f(j,:,i),cxy(j,:,i))
hold on
xlim([0 45])
line ([4,4],[0, 1],'Color','red','LineStyle','--') % Cada linea separa las bandas de energia para ver la coherencia entre bandas
line ([8,8],[0, 1],'Color','red','LineStyle','--')
line ([13,13],[0, 1],'Color','red','LineStyle','--')
line ([30,30],[0, 1],'Color','red','LineStyle','--')
% Here the legend should appear only for the plots not for the lines
legend('Signal 1','Signal 2','Signal 3','Signal 4','Signal 5', 'Signal 6')
end
end
My result is the plot I attach. I've searched arround how to solve this but nothing is working.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194780/image.jpeg)
Thanks in advanced for the help and sorry for the basic question.
댓글 수: 2
KALYAN ACHARJYA
2018년 8월 29일
"how to take the lines out of the Legend?"
Which lines are you talking?
Are these lines within legend dashed colors lines?
채택된 답변
dpb
2018년 8월 29일
편집: dpb
2018년 8월 29일
Use the handles of the lines you wish to add legends to...
nFig=8; % set the numbers via variables
nLin=6; % instead of using "magic" numbers...
hL=gobjects(nFig,nLin); % preallocate for the line handles
for j=1:nFig
figure(j)
for i=1:nLin
hL(j,i)=plot(f(j,:,i),cxy(j,:,i)); % plot the line, save the line handle for it...
hold on
xlim([0 45])
line ([4,4],[0, 1],'Color','red','LineStyle','--') % Cada linea separa las bandas de energia para ver la coherencia entre bandas
line ([8,8],[0, 1],'Color','red','LineStyle','--')
line ([13,13],[0, 1],'Color','red','LineStyle','--')
line ([30,30],[0, 1],'Color','red','LineStyle','--')
% Here the legend should appear only for the plots not for the lines
end
% Add legend after the lines are drawn using the handles of those wanted to show only
legend(hL(j,:),{'Signal 1','Signal 2','Signal 3','Signal 4','Signal 5', 'Signal 6'})
end
One could also build the legend text dynamically to match the loop indices instead of hardcoding...
댓글 수: 2
dpb
2018년 8월 29일
편집: dpb
2018년 8월 29일
You're right, got the loop indices reversed...I'll make the correction, thanks.
If don't code with "magic numbers" as general rule it makes modifying/using code for other purposes much easier or makes the given code useful if the present data sizes change for any reason.
I wasn't really suggesting to just move the constants to explicit variables; I just used that as a shortcut/prompt, what I really meant was to do something like
[nFig,nLin]=size(cxy);
THEN, if you get a dataset for some reason that isn't exactly 8x6 you still don't have to do anything but run the code to process it.
It's just a good habit to develop.
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!