Reputation: 27
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?
Upvotes: 1
Views: 598
Reputation: 10440
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
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]})
Upvotes: 1