加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab的Bar图中Bar颜色灵活设置的一点总结(转)

(2013-12-24 19:29:55)


http://attach.matlabsky.com/data/attachment/forum/201204/13/121305kek77k2fnuzakgze.jpg.thumb.jpg 

% 有时候可能需要灵活展示Bar图中Bar颜色,比如收益率展示中我们希望大于0的为红色,小于0的为蓝色(或绿色)
% 类似上图的该如何实现
  1. %% 类似实现方式如下
  2. Data = [1,-2,3,1,-1,-2];
  3. DataP = Data;
  4. DataN = Data;
  5. DataP(Data < 0) = 0;
  6. DataN(Data > 0) = 0;
  7. figure;
  8. bar(DataP,'r','EdgeColor','r');
  9. hold on;
  10. bar(DataN,'b','EdgeColor','b');
复制代码
http://attach.matlabsky.com/data/attachment/forum/201204/13/121331ix2v3vg3jx3diqug.jpg.thumb.jpg 
% 通过如上方式通过设置关注调整不同的值的范围,来控制Bar颜色
% 比如值小于-1的bar设为蓝色,值为-1到0的bar设为黑色,值大于0的bar设为红色
% 实现如下,如下实现方式可以进行相关扩展
  1. Data = [1,-2,3,1,-1,-2,-0.9];
  2. DataT = [Data;Data;Data];
  3. threshold = [-1,0,1];
  4. ColorSer = {'b','k','r'};
  5. figure;
  6. for i = 1:size(DataT,1)
  7.     if i == 1
  8.         DataT(i,Data>threshold(i)) = 0;
  9.     end
  10.     if i == size(DataT,1)
  11.         DataT(i,Data
  12.     end
  13.     if i ~= size(DataT,1) && i>1
  14.         DataT(i,Data<=threshold(i-1)) = 0;
  15.         DataT(i,Data>=threshold(i)) = 0;
  16.     end

  17.     bar(DataT(i,:),ColorSer{i},'EdgeColor',ColorSer{i});
  18.     hold on;
  19. end
复制代码
http://attach.matlabsky.com/data/attachment/forum/201204/13/121401cq8eogfvvp3z1gf3.jpg.thumb.jpg 
2012-4-13 12:14:01 上传
下载附件 (21.44 KB)


% 有没有其它方式实现每一个Bar的颜色的灵活设置呢?
% 答案是肯定的,可以通过调整 FaceVertexCData 属性来调整颜色
% 实现如下
  1. Data = [1,-2,3,1];
  2. figure;
  3. b_h = bar(Data);
  4. ch = get(b_h,'children');
  5. set(ch,'FaceVertexCData',[0 0 1;0 1 1;1 1 1;1 0 1])
复制代码
http://attach.matlabsky.com/data/attachment/forum/201204/13/1214277vca71o5omamcv11.jpg.thumb.jpg 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有