matlab之bar图只有一组数据时,如何让每个bar都有不同的颜色?


2020.11.08更新

现在bar图支持CData来修改了, 比如:

b=bar(data);
b.CData(1,:)=[o.5,o.5,o.5];

即可. 注意这里指定CData只能用RGB三元组, 无法使用十六进制hex颜色.
以下的内容仅供参考.


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颜色都不一样的图。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值