How do I fix my legend?

Hello,
'parnam' contains 8 1x1 structures (data and text). The data contains the latitude, longitude and altitude of a sensor. I want to create a legend for my plot that states the latitude of each plot, but it only prints the first.
figure
for k=1:m
scatter(x(:,k),y(:,k)), hold on
legend(sprintf('aircraft at %2.2f degrees latitude', parnam{1,k}.data(1,1)))
end
hold off

 Accepted Answer

dpb
dpb on 16 May 2017
There's only one legend per plot; you're overwriting each pass thru the loop.
for k=1:m
scatter(x(:,k),y(:,k))
if k==1, hold on, end % can't get an "onner"
end
legend(num2str(parnam{1,1:m}.data(1,1)).','aircraft at %2.2f degrees latitude')

3 Comments

Alex
Alex on 16 May 2017
Edited: Alex on 16 May 2017
??? Bad cell reference operation.
MATLAB doesnt like "...{1,1:m}".
This works though so thank you:
figure
for k=1:m
scatter(x(:,k),y(:,k)), hold on
h(k,:) =sprintf('aircraft at %2.2f degrees latitude', parnam{1,k}.data(1,1)) ;
end
legend(h)
hold off
legend( cellstr( num2str( cellfun( @(C) C.data(1,1), parnam(1,1:m) ) .', 'aircraft at %2.2f degrees latitude' ) ) )
Alex, your version will not work if some of the data values have a different number of digits, such as 3.7 degrees or 13.7 degrees. But you could use
figure
for k=1:m
scatter(x(:,k),y(:,k)), hold on
h{k} = sprintf('aircraft at %2.2f degrees latitude', parnam{1,k}.data(1,1)) ;
end
legend(h)
hold off

Sign in to comment.

More Answers (0)

Tags

Asked:

on 16 May 2017

Commented:

on 16 May 2017

Community Treasure Hunt

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

Start Hunting!