How can I add a print the first bar with a color, second with color different and the last with a different color in subplot ?
2 views (last 30 days)
Show older comments
I have this program
x1=[1;2;3]
y1 = [91,25,3];
y2 = [71,22,13];
y3 = [81,22,33];
y4 = [71,12,63];
y5 = [61,42,23];
y6 = [51,21,23];
figure;
subplot(3,2,1);
b1=bar(x1,y1);
ylabel('Cost per Byte (%)');
ylim([0 max(y1)+10]);
title('Aaa');
subplot(3,2,2);
b2=bar(x1,y2);
ylabel('Security (%)');
ylim([0 max(y2)+10]);
title('Second plot');
subplot(3,2,3);
b3=bar(x1,y3);
ylabel('Data rate (kbps)');
ylim([0 max(y3)+10]);
title('Third plot');
subplot(3,2,4);
b4=bar(x1,y4);
ylabel('Delay (ms)');
ylim([0 max(y4)+10]);
title('Fourth plot');
subplot(3,2,5);
b5=bar(x1,y5);
ylabel('Jitter (ms)');
ylim([0 max(y5)+10]);
title('Fifth plot');
subplot(3,2,6);
b6=bar(x1,y6);
ylabel('Loss ratio 10^6 (ms)');
ylim([0 max(y6)+10]);
title('Sixth plot');
legend('peaks');
set(b1,'FaceColor','red');
I want colorate all the first bars by a color and add a legend like the picture :
Please help me.
0 Comments
Accepted Answer
Star Strider
on 21 Apr 2021
The only way that I am aware of to plot the individual bar colours is to use a loop:
x1 = [1;2;3]
y1 = [91,25,3];
cm = [1 0 0; 1 1 0; 0 1 1];
figure
hold on
for k = 1:numel(x1)
b1(k) = bar(x1(k),y1(k), 'FaceColor',cm(k,:));
end
hold off
and so for the rest. It would be worthwhile to make a function out of this if you are going to use it repeatedly, for example:
x1 = [1;2;3];
y1 = [91,25,3];
y2 = [71,22,13];
y3 = [81,22,33];
y4 = [71,12,63];
y5 = [61,42,23];
y6 = [51,21,23];
figure;
subplot(3,2,1);
b1=barfcn(x1,y1);
ylabel('Cost per Byte (%)');
ylim([0 max(y1)+10]);
title('Aaa');
subplot(3,2,2);
b2=barfcn(x1,y2);
ylabel('Security (%)');
ylim([0 max(y2)+10]);
title('Second plot');
subplot(3,2,3);
b3=barfcn(x1,y3);
ylabel('Data rate (kbps)');
ylim([0 max(y3)+10]);
title('Third plot');
subplot(3,2,4);
b4=barfcn(x1,y4);
ylabel('Delay (ms)');
ylim([0 max(y4)+10]);
title('Fourth plot');
subplot(3,2,5);
b5=barfcn(x1,y5);
ylabel('Jitter (ms)');
ylim([0 max(y5)+10]);
title('Fifth plot');
subplot(3,2,6);
b6=barfcn(x1,y6);
ylabel('Loss ratio 10^6 (ms)');
ylim([0 max(y6)+10]);
title('Sixth plot');
legend('peaks');
set(b1,'FaceColor','red');
function bh = barfcn(x,y)
cm = [1 0 0; 1 1 0; 0 1 1];
hold on
for k = 1:numel(x)
bh(k) = bar(x(k),y(k));
bh(k).FaceColor = cm(k,:);
end
xlim([min(x)-0.5 max(x)+0.5])
hold off
end
Experiment to get the result you want.
3 Comments
Star Strider
on 21 Apr 2021
My pleasure!
Change the ‘cm’ matrix to whatever you want. The colours are defined by its rows, not columns, so experiment with those to get the colours you want. The the documentation on colormap for a choice of several different options, and specific colours.
For example,
cm = turbo(3);
would be one option.
More Answers (0)
See Also
Categories
Find more on Line Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!