基于matlab的三维柱状图绘制


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


简介

对于生物建模、数据统计等,经常会得到三维数据,绘制三维柱状图是显示它们的重要方式。但matlab绘制三维柱状图,可能需要进一步的人工干预才能得到预想的效果。这里简要介绍一下基于matlab的三维柱状图绘制。

注:部分内容参考网络共享。


实例

1. function main()
2. % 现要画出其分组3维柱状图。
3. % 最简单的写法如下:
4. 
5. clc; clear all; close all;
6. label1 = {'张三', '李四', '王二', '胡汉三'};%标签
7. label2 = {'合格率','次品率','废品率'};%标签
8. Z = rand(3, 4);
9. hb = bar3(Z);
10. renderCDataByHeight(hb, false);
11. colorbar;
12. set(gca, 'xticklabel', label1);
13. set(gca, 'yticklabel', label2);
14. view([-28, 40])
15. %文字标注
16. for i = 1:size(Z,1)
17.     for j = 1:size(Z,2)
18.         text(j, i, Z(i,j)+0.01, num2str(Z(i,j)));
19.     end
20. end
21. pause(1);
22. renderCDataByHeight(hb, true);
23. pause(1);
24. renderCDataByHeight(hb, true);
25. colormap spring; 
26. 
27. 
28. 
29. 
30. function renderCDataByHeight(hb, interp)
31. % hb为bar3返回的三维柱状图句柄,
32. % 对hb的各柱子按高度渲染CData属性,
33. % interp指定是否渐变(默认为false)
34. % interp==true:每个柱子从下到上颜色渐变
35. % interp==false:每个柱子一种颜色
36. % hb中句柄个数等于数据列数,hb(j)为第j列数据的句柄
37. if nargin == 1
38.     % interp默认值
39.     interp=false;
40. end
41. if interp == true
42.     %每个柱子从下到上颜色渐变
43.     shading interp;
44.     for j = 1 : length(hb)
45.         % 用Zdata属性去填充Cdata属性
46.         zdata = get(hb(j), 'Zdata');
47.         set(hb(j), 'Cdata', zdata);
48.         % 设置边线颜色
49.         set(hb, 'EdgeColor', [0.5 0.5 0.5]);
50.     end
51. else
52.     % 每个柱子一种颜色
53.     for j = 1:length(hb)
54.         % 设置hb(j)的Cdata属性
55.         % 制作CData新值cdata用以替换其旧值
56.         % cdata将在ZData的基础上修改而成
57.         cdata = get(hb(j), 'ZData');
58.         % cdata行数除以6就是数据行数
59.         m = size(cdata,1)/6;
60.         % 填充cdata
61.         for i = 1:m
62.             % 设置cdata中(i,j)数据对应的6行
63.             % 将这6行的值均填充(i,j)数据的值
64.             vij = cdata((i-1)*6+2,2);%可由cdata(ZData)中获得(i,j)数据的值
65.             cdata((i-1)*6+1:(i-1)*6+6,:) = vij;%(i,j)数据对应的6行填充完毕
66.         end
67.         set(hb(j), 'Cdata', cdata);%将cdata赋给Cdata属性
68.     end
69. end


复制代码

结果

三维柱状图 统计 数据Java 生成三维柱状图_句柄

 


总结

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