Search code examples
matlabplotcolorsbar-chartmatlab-figure

How to control colours for group in bar3 plot in Matlab


I did a 3D bar plot in Matlab. I want the same color for each group (for example s1=blue, s2=green and s3=red; see the graph below)

I used the following code:

Z = data;
Y = [1 300  600];   % The positions of bars along the y axis
h = bar3(Y,Z',0.05);
[nGroup, nBar] = size(Z);
nColors  = size(get(gcf, 'colormap'), 1);
colorInd = randi(nColors, nBar, nGroup);
for i = 1:nGroup
    c     = get(h(i), 'CData');
    color = repelem(repmat(colorInd(:, i), 1, 4), 6, 1);
    set(h(i), 'CData', color);
end
set(gca, 'YTickLabel', 

any suggestions?

enter image description here


Solution

  • Instead of setting the groups by the y-axis, set them by the x-axis, so each group is one graphic object, and can be colored altogether. Here is a simple way to do this:

    Z = randi(7,11,3); % some data with three groups
    bar3(Z,0.05); % Each column in Z is one graphic object
    set(gca,'XTickLabel',{'s1' 's2' 's3'}); % set the lables of the groups
    set(gca,'PlotBoxAspectRatioMode','auto') % make the view wider
    set(gca,'YDir','normal') % reverse the y-axis  to match your example
    colormap(lines(3)) % define 3 colors for coloring by group
    view(55,22) % rotate the orintation to match your example
    

    bar3

    If you want the colors in your question you can replace the colormap with:

    colormap(flipud(eye(3))) 
    

    or type:

    h = bar3(Z,0.05); % instead of bar3(Z,0.05)
    set(h,{'FaceColor'},{[0 0 1];[0 1 0];[1 0 0]})