查看: 2391|回复: 0|关注: 0

[未答复] 根据概率(值)设置bar(hist)的颜色

[复制链接]

MATLAB 基础讨论
版块优秀回答者

中级

570 麦片

财富积分


5001500


73

主题

1451

帖子

105

最佳答案
  • 关注者: 80
发表于 2018-5-17 11:08:53 | 显示全部楼层 |阅读模式
这是个记录的帖子:
等我不在这个世界上的时候,希望有人能通过这个帖子的内容,少走些弯路,多学些。


目的:
别人的问题,根据bar的值,设置bar的color。

matlab2014之后,bar的children不太好设置了,所以不同的版本用不同的实现方式。
思路
2014之后,用 一个循环,一个bar,一个bar画,根据值,找对应的color.
设置bar 的color和width.

fig_bar_dif_color.png
  1. clear all
  2. clc
  3. clf

  4. %% outline
  5. % https://www.ilovematlab.com/thread-545585-1-1.html
  6. % mod : 17-May-2018 10:24:20


  7. %% main
  8. % generate bar data
  9. a=randn(5000,1);
  10. [hi_va,hi_bi]=hist(a,linspace(-4,4,40));
  11. hi_va=hi_va./sum(hi_va);
  12. n_bar = length(hi_bi);
  13. hi_max = max(hi_va);

  14. % generate color
  15. n_col=100;
  16. col_mm = colormap(jet(n_col));

  17. % plot bar each time
  18. hold on
  19. for i =1:n_bar

  20.     ind_col = floor((n_col-1)*hi_va(i)/hi_max)+1; % connect hi_va and colormap
  21.     bar(hi_bi(i),hi_va(i),'edgecolor','none',...
  22.         'facecolor',col_mm(ind_col,:),...
  23.         'barwidth',0.18);

  24. end

  25. % other setting
  26. colormap(col_mm)
  27. caxis([0 hi_max])
  28. colorbar
  29. box on
  30. grid on
复制代码



before2014
直接设置color
  1. clear all
  2. clc
  3. clf


  4. a=randn(5000,1);
  5. [hi_va,hi_bi]=hist(a,linspace(-3,3,20));
  6. hi_va=hi_va./sum(hi_va);
  7. n_bar = length(hi_bi);
  8. hi_max = max(hi_va);


  9. colormap(jet(100))

  10. h=bar(hi_bi,hi_va);
  11. ch = get(h,'Children');
  12. fvd = get(ch,'Faces');
  13. fvcd = get(ch,'FaceVertexCData');
  14. for row = 1:n_bar
  15.      fvcd(fvd(row,:)) = hi_va(row);
  16. end

  17. set(ch,'FaceVertexCData',fvcd)
  18. caxis([0 hi_max])

  19. colorbar
  20. grid on
复制代码


关于画图的设置,差不多。
有问题,可以contact me
meatball1982@163.com

fig_bar_dif_color.png
回复主题 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表