大连家焖杂拌鱼做法:基于matlab的三维柱状图绘制

来源:百度文库 编辑:偶看新闻 时间:2024/06/11 09:12:29

基于matlab的三维柱状图绘制

2011-11-20 14:34| 发布者: dynamic| 查看: 413| 评论: 0|原作者: lyqmath

摘要: 对于生物建模、数据统计等,经常会得到三维数据,绘制三维柱状图是显示它们的重要方式。但matlab绘制三维柱状图,可能需要进一步的人工干预才能得到预想的效果。这里简要介绍一下基于matlab的三维柱状图绘制。 ...-简介
对于生物建模、数据统计等,经常会得到三维数据,绘制三维柱状图是显示它们的重要方式。但matlab绘制三维柱状图,可能需要进一步的人工干预才能得到预想的效果。这里简要介绍一下基于matlab的三维柱状图绘制。
注:部分内容参考网络共享。

实例
  1. function main()
  2. % 现要画出其分组3维柱状图。
  3. % 最简单的写法如下:

  4. clc; clear all; close all;
  5. label1 = {'张三', '李四', '王二', '胡汉三'};%标签
  6. label2 = {'合格率','次品率','废品率'};%标签
  7. Z = rand(3, 4);
  8. hb = bar3(Z);
  9. renderCDataByHeight(hb, false);
  10. colorbar;
  11. set(gca, 'xticklabel', label1);
  12. set(gca, 'yticklabel', label2);
  13. view([-28, 40])
  14. %文字标注
  15. for i = 1:size(Z,1)
  16.     for j = 1:size(Z,2)
  17.         text(j, i, Z(i,j)+0.01, num2str(Z(i,j)));
  18.     end
  19. end
  20. pause(1);
  21. renderCDataByHeight(hb, true);
  22. pause(1);
  23. renderCDataByHeight(hb, true);
  24. colormap spring;




  25. function renderCDataByHeight(hb, interp)
  26. % hb为bar3返回的三维柱状图句柄,
  27. % 对hb的各柱子按高度渲染CData属性,
  28. % interp指定是否渐变(默认为false)
  29. % interp==true:每个柱子从下到上颜色渐变
  30. % interp==false:每个柱子一种颜色
  31. % hb中句柄个数等于数据列数,hb(j)为第j列数据的句柄
  32. if nargin == 1
  33.     % interp默认值
  34.     interp=false;
  35. end
  36. if interp == true
  37.     %每个柱子从下到上颜色渐变
  38.     shading interp;
  39.     for j = 1 : length(hb)
  40.         % 用Zdata属性去填充Cdata属性
  41.         zdata = get(hb(j), 'Zdata');
  42.         set(hb(j), 'Cdata', zdata);
  43.         % 设置边线颜色
  44.         set(hb, 'EdgeColor', [0.5 0.5 0.5]);
  45.     end
  46. else
  47.     % 每个柱子一种颜色
  48.     for j = 1:length(hb)
  49.         % 设置hb(j)的Cdata属性
  50.         % 制作CData新值cdata用以替换其旧值
  51.         % cdata将在ZData的基础上修改而成
  52.         cdata = get(hb(j), 'ZData');
  53.         % cdata行数除以6就是数据行数
  54.         m = size(cdata,1)/6;
  55.         % 填充cdata
  56.         for i = 1:m
  57.             % 设置cdata中(i,j)数据对应的6行
  58.             % 将这6行的值均填充(i,j)数据的值
  59.             vij = cdata((i-1)*6+2,2);%可由cdata(ZData)中获得(i,j)数据的值
  60.             cdata((i-1)*6+1:(i-1)*6+6,:) = vij;%(i,j)数据对应的6行填充完毕
  61.         end
  62.         set(hb(j), 'Cdata', cdata);%将cdata赋给Cdata属性
  63.     end
  64. end
复制代码结果
 

总结
结合颜色映射表来绘制柱状图,通过进一步调整一般可以达到要求。