如何在MATLAB中更改条形颜色

时间:2014-11-28 00:22:36

标签: matlab

我是编程的新手所以我正在学习MATLAB的入门我想知道如何在MATLAB中更改bar的颜色。

这是我的剧本。有人可以帮忙!!

x =[1:8]
for y = [20 30 40 50 60 70 80]
bar(x,y)
if y < 40
col = 'b';
else if y > 40
col= 'g';
end
end
end

我也试过bar(x,y,r),但它不起作用

3 个答案:

答案 0 :(得分:4)

虽然这对于您的具体问题来说太过分了,但一般来说,要根据高度更改条形的颜色,您可以在条形图上应用colormap。这主要来自bar documentation

x = 1:8;
y = 10*x;
h=bar(y);  %// create a sample bar graph

对于色彩映射MAP,您可以这样做:

colormap(MAP)
ch = get(h,'Children');
fvd = get(ch,'Faces');
fvcd = get(ch,'FaceVertexCData');
[zs, izs] = sort(y);
for i = 1:length(x)
    row = izs(i);
    fvcd(fvd(row,:)) = i;
end
set(ch,'FaceVertexCData',fvcd)
hold off

例如,使用内置colormap hsv即可 enter image description here

但在这种情况下,我们需要一个非常具体的色图,

b=40 %// the cut-off for changing the colour
MAP=zeros(length(x),3); %// intialise colormap matrix
MAP(y<b,:)=repmat([0 0 1],sum(y<b),1); %// [0 0 1] is blue, when y<40
MAP(y>=b,:)=repmat([0 1 0],sum(y>=b),1); %// [0 1 0] is green, for y>=40
colormap(MAP)

给出了

enter image description here

答案 1 :(得分:2)

根据y使用两种不同的颜色:根据y值计算logical index,并使用适当的参数调用bar两次:

x = [1:8];
y = [20 30 40 50 60 70 80];
ind = y < 40; %// logical index
bar(x(ind), y(ind), 'facecolor', 'b', 'edgecolor', 'k') %// blue bars, black edge
hold on %// keep plot
bar(x(~ind), y(~ind), 'facecolor', 'g', 'edgecolor', 'k') %// green bars, black edge
set(gca,'xtick',x)

enter image description here

答案 2 :(得分:-2)

bar可以采用第三个参数,即颜色值,例如bar(x,y, 'r')