我是编程的新手所以我正在学习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),但它不起作用
答案 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
即可
但在这种情况下,我们需要一个非常具体的色图,
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)
给出了
答案 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)
答案 2 :(得分:-2)
bar可以采用第三个参数,即颜色值,例如bar(x,y, 'r')
。