How do I edit the legend when I have *many* entries (but only 2 types of data)

460 ビュー (過去 30 日間)
10B
10B 2016 年 7 月 13 日
回答済み: Sharad Singhania 2019 年 7 月 14 日
Hello Community,
I have a presentation problem regarding a plot legend that I hope you can help with. This situation is that I plot a bar chart and need to identify a single bar with a different colour when the data hits certain conditions, coded as:
% raise figure
figure(1)
hold on
% set color bar
cm = [0.90 0.90 0.90; 0 0 0];
% run for loop to colour data individually & when data conditions are met
for i = 1:length(pltvar1srt)
h=bar(i,pltvar1srt(i));
if pltvar1srt(i) == 1.71 && 4
set(h,'FaceColor',cm(1,:));
else
set(h,'FaceColor',cm(2,:));
end
end
hold off
and this produces the plot I need:
The problem is when I add the legend, due to the way I have coloured the bar, I get many data entries:
Using the legend help, I have tried to write the legend using a variety of calls - all of which haven't worked unfortunately:
legend ([data1 data10]);
legend ([data data10]);
legend ([pltvar1srt.9 pltvar1srt.10]);
legend ([pltvar1srt(9) pltvar1srt(10)]);
legend ([cm(1,:) cm(2,:)], 'Data 1', 'Data 2');
% etc. etc.
but still no luck. I have also looked at this useful function - but again, couldn't get it to work in the way I needed.
I simply want the legend to have the two entries ie 'Black Data' and 'Grey Data' and be coloured appropriately.
Can anyone offer any help please?
Many thanks,
10B.
  1 件のコメント
10B
10B 2016 年 7 月 19 日
Reading through various examples, I starting to think that 'hggroup' may be part of the solution, similar to the example here, the drawback is that I am not creating the plot in the same way.
I'm still working on this - but would be grateful of some help if possible!

サインインしてコメントする。

採用された回答

Thorsten
Thorsten 2016 年 7 月 19 日
if pltvar1srt(i) == 1.71 && 4
set(h,'FaceColor',cm(1,:));
hlegend(1) = h;
else
set(h,'FaceColor',cm(2,:));
hlegend(2) = h;
end
and then
legend(hlegend, {'Data 1' 'Data 2'})
  1 件のコメント
10B
10B 2016 年 7 月 21 日
Ah! Of course - Many thanks Thorsten.
I had experimented with:
h=set(h,'FaceColor',cm(1,:)); etc.
at one point which obviously didn't work, but I was sort of along the right track, so thanks for helping me out.
You never know, in just 5 or 6 more years of this pain, I may just learn to master the basics...

サインインしてコメントする。

その他の回答 (1 件)

Sharad Singhania
Sharad Singhania 2019 年 7 月 14 日
You can also do it from plot editor.
Go to plot editor > Property editor -Legend > more properties... > string > click on array icon> modify as per your requirement.

Community Treasure Hunt

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

Start Hunting!

Translated by