matlab之bar图只有一组数据时,如何让每个bar都有不同的颜色?
程序员文章站
2023-12-25 18:05:21
...
bar图的数据只有一组时,画出来所有bar都是一个颜色的。通过修改‘facecolor’也是对所有bar的修改。
比如
data=[0.088888889 0.077777778 0.2 0.266666667 0.111111111 0.255555556];
bar(data);
得到图:
要想让每个bar都有不同的颜色,该怎么修改呢?
在旧版本的matlab中,是可以利用bar图的children属性来修改:
b = bar(data);
ch = get(b,'children');
set(ch,'FaceVertexCData',[颜色矩阵]);
但是新版本中bar对象已经没有children属性,所以此方案已经不可行。
可以换个思路:
可以画6个图,利用hold on命令叠加在一起。分别设置每个图的颜色。
每个图都是只对应的那个bar有值,其他的为0。
比如生成六组数据:
dataT=zeros(6,6);
for i=1:6
dataT(i,i)=data(i);
end
data1=dataT(1,:);
data2=dataT(2,:);
data3=dataT(3,:);
data4=dataT(4,:);
data5=dataT(5,:);
data6=dataT(6,:);
再对数据进行画图。
figure;
set (gcf,'WindowStyle','normal','Position', [500,400,700,300],'color','w');
bar(data1,'FaceColor',[.69 .69 .69],'BarWidth',0.8);
hold on
bar(data2,'FaceColor',[.85 .85 .85],'BarWidth',0.8);
hold on
bar(data3,'FaceColor',[.47 .47 .47],'BarWidth',0.8);
hold on
bar(data4,'FaceColor',[.15 .15 .15],'BarWidth',0.8);
hold on
bar(data5,'FaceColor',[.53 .53 .53],'BarWidth',0.8);
hold on
bar(data6,'FaceColor',[ .31 .31 .31],'BarWidth',0.8);
即可得到每个bar颜色都不一样的图。