Search code examples
matlabplotcolorsbar-chartmatlab-figure

Changing colors in group barplot


I am plotting grouped bar with error-bar. As it is now, the bars are either yellow or blue. I would like to change that: The bars within each group should still have different colors, but I would like to choose something else than yellow and blue. How could this be done?

model_series = [0.74*100, 0.5*100; 0.74*100, 0.5*100;0.74*100, 0.5*100 ];
model_error = [4.8,5.9;0, 0; 0,6];

%subplot(2,1,1)

h = bar(model_series);
set(h,'BarWidth',1);    % The bars will now touch each other
set(gca,'YGrid','on')
set(gca,'GridLineStyle','-')
%set(h,'FaceColor',[0.2,0.5,0.3])
set(gca,'YLim',[0 100])
title(['\fontsize{16}Accuracies'])

set(gca,'xtick',[1 2 3 4 5 6])
set(gca,'xticklabel',{'\fontsize{16}1.condition','\fontsize{16}2.condition','\fontsize{16}3.condition'})
set(get(gca,'YLabel'),'String','\fontsize{16}Accuracy')

hold on;
numgroups = size(model_series, 1); 
numbars = size(model_series, 2); 
groupwidth = min(0.8, numbars/(numbars+1.5));
legend('\fontsize{16}Group1','\fontsize{16}Group2','\fontsize{16}Group3')

for i = 1:numbars
    % Based on barweb.m by Bolu Ajiboye from MATLAB File Exchange
    x = (1:numgroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*numbars);  % Aligning error bar with individual bar
    errorbar(x, model_series(:,i), model_error(:,i), 'k', 'linestyle', 'none');
end

Solution

  • The property you want to change is indeed 'FaceColor' which I see commented out in your code. You wrote it like set(h,'FaceColor',[0.2,0.5,0.3]) which changes the 'FaceColor' of all the bars. If you need different colors for each bar, you need to assign different colors to each of them like this:

    set(h(1), 'FaceColor', 'm');  %Changing color of first bar to magenta
    set(h(2), 'FaceColor', 'g');  %Changing color of second bar to green
    

    With MATLAB R2014b and later versions, you can also use the dot notation to access/change the properties.

    h(1).FaceColor = 'm';         %Changing color of first bar to magenta
    h(2).FaceColor = 'g';         %Changing color of second bar to green
    

    output