当前位置:   article > 正文

基于Matlab的统计图绘制(1)——直条图、百分条图、圆图(圆环图)_matlab 百分比作图

matlab 百分比作图

一、绘制直条图

直条图分为单式和复式两种。单式适用于只有一组变量,复式适用于有若干组变量。

1.1 单式直条图

利用bar函数,绘制男女人数统计直条图。

  1. % 单式直条图
  2. x = {'男', '女'};
  3. y = [10, 30];
  4. bar(y);
  5. ylim([0,40]); %y轴范围
  6. set(gca, 'xticklabel', x); %设置x轴刻度标签
  7. xlabel('性别'); %x轴名称
  8. ylabel('人数'); %y轴名称
  9. title('男女人数统计直条图'); %统计图名称

代码运行如下 

简单使用bar函数即可绘制直条图,但通常情况下需要对图形美化。本文只讲解如何美化单式条形图,后续同理美化即可。

1.2 美化单式直条图 

直条图柱形粗细的设置可以直接在bar函数后面加上系数,如bar(y,0.4)中0.4表示柱形宽度占总宽度的40%。

此外还可以设置颜色bar(y,'r'),表示设置为红色。具体颜色可以参考:https://ww2.mathworks.cn/help/matlab/creating_plots/specify-plot-colors_zh_CN.html

  1. % 美化的单式直条图
  2. x = {'男', '女'};
  3. y = [10, 30];
  4. bar(y,0.4,'r');
  5. ylim([0,40]);
  6. set(gca, 'xticklabel', x);
  7. xlabel('性别');
  8. ylabel('人数');
  9. title('男女人数统计直条图');

代码运行如下  

此外,颜色柱形颜色、轮廓颜色、轮廓线粗细都可以调整分别加上‘FaceColor’,‘Edgecolor’,‘LineWidth’修饰即可,并且可以用rbg三原色设置,在后面加上[R,G,B]即可。

  1. % 美化的单式直条图
  2. x = {'男', '女'};
  3. y = [10, 30];
  4. bar(y,'FaceColor',[0 .7 .7],'EdgeColor',[.5 .2 .2],'LineWidth',1.5);
  5. ylim([0,40]);
  6. set(gca, 'xticklabel', x);
  7. xlabel('性别');
  8. ylabel('人数');
  9. title('男女人数统计直条图');

代码运行如下  

 

 1.3 复式直条图

注意:

1. 单式直条图输入的y是一列的矩阵;而复式直条图,是两列或者更多列的矩阵

2. 复式需要legend函数设置图例。

  1. % 复式直条图
  2. x = {'近视眼','远视眼','肥胖'};
  3. y = [0.4 0.6; 0.5 0.3;0.2 0.1];
  4. bar(y)
  5. ylim([0,1]);
  6. set(gca, 'xticklabel', x);
  7. ylabel('患病率');
  8. legend('男','女')

代码运行如下  

 1.4 横向直条图

横向直条图同样包括单式和复式,在此以单式为例。利用barh函数绘制

需要注意的是:因为改变了x,y的位置,后续也同时需要更改xlim,set,xlabel,ylabel函数。

  1. % 其他直条图
  2. x = {'男', '女'};
  3. y = [10, 30];
  4. barh(y);
  5. xlim([0,40]);
  6. set(gca, 'yticklabel', x);
  7. ylabel('性别');
  8. xlabel('人数');
  9. title('男女人数统计直条图');

代码运行如下  

二、百分条图

以长条面积为100%,用长条内隔断面积所占的百分比来表示各部分在全体中所占的比例。

2.1 单式百分条图

利用barh函数,具体思路如下:

- 首先计算各部分比例,如下代码利用了per = y / sum(y);计算比例
- 再绘制横向直条图

- 最后将直条图堆叠(‘stacked’)起来

注意:
1. 需要用set函数取消掉yticklabel

2. 需要用legend函数设置图例

  1. % 单式百分条图
  2. x = 1;
  3. y = [40,20,10,30];
  4. per = y/sum(y);
  5. b = barh(x,per,'stacked');
  6. set(gca,'yticklabel',[])
  7. legend('大一','大二','大三','大四')

代码运行如下  

2.2 复式百分条图

具体思路:

- 计算各组比例,如下代码y已经算好

- 利用barh函数绘制复式横向直条图

- 将各组直条图堆叠起来

注意:

1. 需要使用set函数设置y轴刻度标签

2. 需要使用legend函数设置图例

  1. % 复式百分条图
  2. x = [1 2];
  3. y = [0.4 0.7; 0.5 0.1;0.1 0.2];
  4. barh(x,y,'stacked')
  5. x = {'近视眼','肥胖'};
  6. set(gca, 'yticklabel', x);
  7. legend('青少年','中年人','老年人')

代码运行如下  

三、圆图(圆环图)

3.1 圆图(饼图)

直接利用pie函数即可,如需绘制三维图利用pie3函数即可。

  1. % 圆图(饼图)
  2. x = [10,30,20,40];
  3. pie(x)

代码运行如下  

若需额外突出某一块,可以使用explode函数,如下代码,explode = [0,1,0,0];表示突出第二块。

还可以使用labels函数设置每一块的标签。

  1. % 圆图(饼图)
  2. x = [10,30,20,40];
  3. pie(x)
  4. explode = [0,1,0,0];
  5. labels = {'大一','大二','大三','大四'};
  6. pie(x,explode,labels)

代码运行如下  

3.2 复式圆图

需要同时绘制两张图并共用一个图例,可以使用subplot函数绘制子图。subplot(1,2,1)表示绘制一张1*2的子图,最后的1表示第一张图。

  1. % 复式圆图
  2. x1 = [10,30,20,40];
  3. x2 = [20,40,30,10];
  4. subplot(1,2,1);pie(x1);title('男');
  5. subplot(1,2,2);pie(x2);title('女');
  6. legend('大一','大二','大三','大四')

代码运行如下  

3.3 圆环图

利用pie函数和fill函数绘制圆环图

具体思路:

- 先绘制一张圆图

- 再在中间绘制一个白色的圆

  1. % 圆环图
  2. x = [10,30,20,40];
  3. pie(x);
  4. hold on
  5. t=linspace(0,2*pi,200);
  6. fill(cos(t).*.5,sin(t).*.5,'w')

代码运行如下  

3.4 复式圆环图

复式圆环图绘制无法调用函数,需要逐步绘制,具体思路如下:

- 先绘制半径r为1的扇形并填充颜色

- 再绘制半径r为0.77的扇形并填充颜色

- 最后再绘制一个半径为0.5的白色圆形在中间

注意:

1. 需要从12点方向顺时针绘制

2. 绘制一张图后,画下一张图前,需要使用hold on,确保画在同一张图

3. 需要使用axis equal 确保圆形不变形

4. 将横纵坐标周刻度去掉

5. 最后需要使用text函数给各部分命名。

  1. % 复式圆环图
  2. theta = linspace(0*pi/180, 90*pi/180, 100);
  3. r = 1;
  4. x = [0, r * cos(theta), 0];
  5. y = [0, r * sin(theta), 0];
  6. color = [0.8858,0.8500,0.8880];
  7. fill(x, y, color);
  8. hold on
  9. theta = linspace(210*pi/180, 360*pi/180, 100);
  10. r = 1;
  11. x = [0, r * cos(theta), 0];
  12. y = [0, r * sin(theta), 0];
  13. color = [0.6173,0.7311,0.7864];
  14. fill(x, y, color);
  15. hold on
  16. theta = linspace(90*pi/180, 210*pi/180, 100);
  17. r = 1;
  18. x = [0, r * cos(theta), 0];
  19. y = [0, r * sin(theta), 0];
  20. color = [0.4041,0.5218,0.7440];
  21. fill(x, y, color);
  22. theta = linspace(300*pi/180, 450*pi/180, 100);
  23. r = 0.77;
  24. x = [0, r * cos(theta), 0];
  25. y = [0, r * sin(theta), 0];
  26. color = [0.9858,0.8500,0.8880];
  27. fill(x, y, color);
  28. hold on
  29. theta = linspace(180*pi/180, 300*pi/180, 100);
  30. r = 0.77;
  31. x = [0, r * cos(theta), 0];
  32. y = [0, r * sin(theta), 0];
  33. color = [0.7173,0.7311,0.7864];
  34. fill(x, y, color);
  35. hold on
  36. theta = linspace(90*pi/180, 180*pi/180, 100);
  37. r = 0.77;
  38. x = [0, r * cos(theta), 0];
  39. y = [0, r * sin(theta), 0];
  40. color = [0.5041,0.5218,0.7440];
  41. fill(x, y, color);
  42. t=linspace(0,2*pi,200);
  43. fill(cos(t).*.5,sin(t).*.5,'w')
  44. axis([-1.2,1.6,-1.2,1.6])
  45. axis equal;
  46. set(gca,'xticklabel',[])
  47. set(gca,'yticklabel',[])
  48. text(0.6,0.6,'25%')
  49. text(0.4,-0.75,'42%')
  50. text(-0.82,0.5,'33%')
  51. text(0.55,0.1,'42%')
  52. text(-0.35,-0.53,'33%')
  53. text(-0.55,0.4,'25%')
  54. legend('男性近视眼患病率','男性远视眼患病率','男性肥胖患病率','女性近视眼患病率','女性远视眼患病率','女性肥胖患病率','')

代码运行如下 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/482519
推荐阅读
相关标签
  

闽ICP备14008679号