问题
I'd like to create a bar graph where I change the color of some bars. The code for my bar graph is the following:
y = [0.04552309, -0.001730885, 0.023943445, 0.065564478, 0.032253892, 0.013442562, ...
-0.011172323, 0.024595622, -0.100614203, -0.001444697, 0.019383706, 0.890249809];
bar(y)
I want the first six bars to be black and the last 6 bars to be blue, but I have no idea how to do it.
回答1:
You need to plot them separately (but on the same axes):
bar(1:6,y(1:6),'k')
hold on
bar(7:numel(y),y(7:end),'b')
set(gca,'xtick',1:numel(y))

回答2:
The following is adapted from Bar plot with bars in different colors on MATLAB Central:
y= [0.04552309, -0.001730885, 0.023943445, 0.065564478, 0.032253892, 0.013442562, -0.011172323, 0.024595622, -0.100614203, -0.001444697, 0.019383706, 0.890249809];
for ii=1:12
h = bar(ii-0.5, y(ii));
if ii == 1
hold on
end
if ii<=6
col = 'k';
else
col = 'b';
end
set(h, 'FaceColor', col,'BarWidth',0.4)
end
axis([0 12 -0.2 1])
hold off
回答3:
No need to plot separately, here is the simple solution:
y= [0.04552309, -0.001730885, 0.023943445, 0.065564478, 0.032253892, 0.013442562, -0.011172323, 0.024595622, -0.100614203, -0.001444697, 0.019383706, 0.890249809];
figure,
bar(y)
y1 = zeros(1,length(y));
y1(3:5) = y(3:5);
hold on
h = bar(y1)
set(h, 'FaceColor', 'k')
See output
回答4:
Very late as usual, but there is an easy way to 'trick' matlab. You first define your colormap (for instance 3 different colors):
mycolors = lines(3) % or just specify each row by hand
Then you plot your bars in the following way:
bar(x,diag(y),'stacked'); % x will be usually defined as x = 1:number_of_bars
colormap(mycolors);
That's all. The magic comes from the diag function together with the 'stacked' tag that makes matlab think you have more data (but they are all 0).
来源:https://stackoverflow.com/questions/20223647/how-can-i-change-the-color-of-bars-in-bar-graph