注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

王小二的博客

勤俭以修身,淡泊以明志

 
 
 

日志

 
 

如何给多组bar图设置多种颜色?  

2012-11-04 17:57:53|  分类: 专业相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

请问如何给多组bar图设置多种颜色?
例如
a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; bar(a);
见1.jpg
出现的是一共4组,每一组四条bar图(每一组的最后两条因为数据很少,所以显得很低),可是都是蓝颜色。(我的问题里是分成四组数据的,这里为了举例简单)
我想每一组的四条bar图按红,绿,黑,蓝四种颜色区分排列,四组都是这样,在网上找了很久可都没有找到方法,我自己的想法是
bar(a(1,1:3:13),'r',a(1,2:3:14),'g',a(1,3:3:15),'k',a(1,4:3:16),'b'); 可是不行
---------------------------------------------------------------------------------------------------
这个是一位朋友给我的建议
a=1:16; aa=reshape(a,4,4)'; h=bar(aa);
set(h(1),'FaceColor','r'); set(h(2),'FaceColor','g');
set(h(3),'FaceColor','k'); set(h(4),'FaceColor','b');
我试了一下,可是做出来的图形是被压缩了宽度 ,见test1.jpg
我自己试了两个方法
1。barwidth = 0.8;
bar(aa)
结果是没有变化,同test1.jpg
2。
aa=reshape(gesamt,6,4)'; 
h=bar(aa);
set(h(1),'FaceColor','r','BarWidth');
set(h(2),'FaceColor','g','BarWidth');
set(h(3),'FaceColor','k','BarWidth'; 
set(h(4),'FaceColor','b','BarWidth');
结果见test2.jpg,
matlab提示我set命令有错误
宽度有了变化,可是颜色是我无法控制的,
同时横坐标上的字样也不是我程序里作的,Sniffer 1, Sniffer 2,Sniffer 3Sniffer 4
而且我在程序里还有图例的命令,legend('Data','ACK','RTS','CTS');,也没有体现。

----------------------------------------------------------------------------------------------------------------

set(h(1),'FaceColor','r','BarWidth',0.8);

“道生一,一生二,二生三,三生万物,万物负阴而抱阳,冲气以为和”——《道德经》四十二章

有些东西其实没有你我想象的那么困难!
main.jpg 
% 有时候可能需要灵活展示Bar图中Bar颜色,比如收益率展示中我们希望大于0的为红色,小于0的为蓝色(或绿色)
% 类似上图的该如何实现
%% 类似实现方式如下
Data = [1,-2,3,1,-1,-2];
DataP = Data;
DataN = Data;
DataP(Data < 0) = 0;
DataN(Data > 0) = 0;
figure;
bar(DataP,'r','EdgeColor','r');
hold on;
bar(DataN,'b','EdgeColor','b');
复制代码
1.jpg 
% 通过如上方式通过设置关注调整不同的值的范围,来控制Bar颜色
% 比如值小于-1的bar设为蓝色,值为-1到0的bar设为黑色,值大于0的bar设为红色
% 实现如下,如下实现方式可以进行相关扩展
Data = [1,-2,3,1,-1,-2,-0.9];
DataT = [Data;Data;Data];
threshold = [-1,0,1];
ColorSer = {'b','k','r'};
figure;
for i = 1:size(DataT,1)
    if i == 1
        DataT(i,Data>threshold(i)) = 0;
    end
    if i == size(DataT,1)
        DataT(i,Data<threshold(i)) = 0;
    end
    if i ~= size(DataT,1) && i>1
        DataT(i,Data<=threshold(i-1)) = 0;
        DataT(i,Data>=threshold(i)) = 0;
    end
    bar(DataT(i,:),ColorSer{i},'EdgeColor',ColorSer{i});
    hold on;
end
复制代码
2.jpg 
% 有没有其它方式实现每一个Bar的颜色的灵活设置呢?
% 答案是肯定的,可以通过调整 FaceVertexCData 属性来调整颜色
% 实现如下
Data = [1,-2,3,1];
figure;
b_h = bar(Data);
ch = get(b_h,'children');
set(ch,'FaceVertexCData',[0 0 1;0 1 1;1 1 1;1 0 1])
复制代码
3.jpg 

  评论这张
 
阅读(549)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017