赞
踩
直条图分为单式和复式两种。单式适用于只有一组变量,复式适用于有若干组变量。
利用bar函数,绘制男女人数统计直条图。
- % 单式直条图
- x = {'男', '女'};
- y = [10, 30];
- bar(y);
-
- ylim([0,40]); %y轴范围
- set(gca, 'xticklabel', x); %设置x轴刻度标签
- xlabel('性别'); %x轴名称
- ylabel('人数'); %y轴名称
- title('男女人数统计直条图'); %统计图名称
代码运行如下
简单使用bar函数即可绘制直条图,但通常情况下需要对图形美化。本文只讲解如何美化单式条形图,后续同理美化即可。
直条图柱形粗细的设置可以直接在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
- % 美化的单式直条图
- x = {'男', '女'};
- y = [10, 30];
- bar(y,0.4,'r');
-
- ylim([0,40]);
- set(gca, 'xticklabel', x);
- xlabel('性别');
- ylabel('人数');
- title('男女人数统计直条图');
代码运行如下
此外,颜色柱形颜色、轮廓颜色、轮廓线粗细都可以调整分别加上‘FaceColor’,‘Edgecolor’,‘LineWidth’修饰即可,并且可以用rbg三原色设置,在后面加上[R,G,B]即可。
- % 美化的单式直条图
- x = {'男', '女'};
- y = [10, 30];
- bar(y,'FaceColor',[0 .7 .7],'EdgeColor',[.5 .2 .2],'LineWidth',1.5);
-
- ylim([0,40]);
- set(gca, 'xticklabel', x);
- xlabel('性别');
- ylabel('人数');
- title('男女人数统计直条图');
代码运行如下
注意:
1. 单式直条图输入的y是一列的矩阵;而复式直条图,是两列或者更多列的矩阵。
2. 复式需要legend函数设置图例。
- % 复式直条图
- x = {'近视眼','远视眼','肥胖'};
- y = [0.4 0.6; 0.5 0.3;0.2 0.1];
- bar(y)
-
- ylim([0,1]);
- set(gca, 'xticklabel', x);
- ylabel('患病率');
- legend('男','女')
代码运行如下
横向直条图同样包括单式和复式,在此以单式为例。利用barh函数绘制
需要注意的是:因为改变了x,y的位置,后续也同时需要更改xlim,set,xlabel,ylabel函数。
- % 其他直条图
- x = {'男', '女'};
- y = [10, 30];
- barh(y);
-
- xlim([0,40]);
- set(gca, 'yticklabel', x);
- ylabel('性别');
- xlabel('人数');
- title('男女人数统计直条图');
代码运行如下
以长条面积为100%,用长条内隔断面积所占的百分比来表示各部分在全体中所占的比例。
利用barh函数,具体思路如下:
- 首先计算各部分比例,如下代码利用了per = y / sum(y);计算比例
- 再绘制横向直条图
- 最后将直条图堆叠(‘stacked’)起来
注意:
1. 需要用set函数取消掉yticklabel
2. 需要用legend函数设置图例
- % 单式百分条图
- x = 1;
- y = [40,20,10,30];
- per = y/sum(y);
- b = barh(x,per,'stacked');
-
- set(gca,'yticklabel',[])
- legend('大一','大二','大三','大四')
代码运行如下
具体思路:
- 计算各组比例,如下代码y已经算好
- 利用barh函数绘制复式横向直条图
- 将各组直条图堆叠起来
注意:
1. 需要使用set函数设置y轴刻度标签
2. 需要使用legend函数设置图例
- % 复式百分条图
- x = [1 2];
- y = [0.4 0.7; 0.5 0.1;0.1 0.2];
- barh(x,y,'stacked')
- x = {'近视眼','肥胖'};
- set(gca, 'yticklabel', x);
- legend('青少年','中年人','老年人')
代码运行如下
直接利用pie函数即可,如需绘制三维图利用pie3函数即可。
- % 圆图(饼图)
- x = [10,30,20,40];
- pie(x)
代码运行如下
若需额外突出某一块,可以使用explode函数,如下代码,explode = [0,1,0,0];表示突出第二块。
还可以使用labels函数设置每一块的标签。
- % 圆图(饼图)
- x = [10,30,20,40];
- pie(x)
- explode = [0,1,0,0];
- labels = {'大一','大二','大三','大四'};
- pie(x,explode,labels)
代码运行如下
需要同时绘制两张图并共用一个图例,可以使用subplot函数绘制子图。subplot(1,2,1)表示绘制一张1*2的子图,最后的1表示第一张图。
- % 复式圆图
- x1 = [10,30,20,40];
- x2 = [20,40,30,10];
- subplot(1,2,1);pie(x1);title('男');
- subplot(1,2,2);pie(x2);title('女');
- legend('大一','大二','大三','大四')
代码运行如下
利用pie函数和fill函数绘制圆环图
具体思路:
- 先绘制一张圆图
- 再在中间绘制一个白色的圆
- % 圆环图
- x = [10,30,20,40];
- pie(x);
- hold on
- t=linspace(0,2*pi,200);
- fill(cos(t).*.5,sin(t).*.5,'w')
代码运行如下
复式圆环图绘制无法调用函数,需要逐步绘制,具体思路如下:
- 先绘制半径r为1的扇形并填充颜色
- 再绘制半径r为0.77的扇形并填充颜色
- 最后再绘制一个半径为0.5的白色圆形在中间
注意:
1. 需要从12点方向顺时针绘制
2. 绘制一张图后,画下一张图前,需要使用hold on,确保画在同一张图
3. 需要使用axis equal 确保圆形不变形
4. 将横纵坐标周刻度去掉
5. 最后需要使用text函数给各部分命名。
- % 复式圆环图
- theta = linspace(0*pi/180, 90*pi/180, 100);
- r = 1;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.8858,0.8500,0.8880];
- fill(x, y, color);
-
- hold on
- theta = linspace(210*pi/180, 360*pi/180, 100);
- r = 1;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.6173,0.7311,0.7864];
- fill(x, y, color);
-
- hold on
- theta = linspace(90*pi/180, 210*pi/180, 100);
- r = 1;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.4041,0.5218,0.7440];
- fill(x, y, color);
-
- theta = linspace(300*pi/180, 450*pi/180, 100);
- r = 0.77;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.9858,0.8500,0.8880];
- fill(x, y, color);
-
- hold on
- theta = linspace(180*pi/180, 300*pi/180, 100);
- r = 0.77;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.7173,0.7311,0.7864];
- fill(x, y, color);
-
- hold on
- theta = linspace(90*pi/180, 180*pi/180, 100);
- r = 0.77;
- x = [0, r * cos(theta), 0];
- y = [0, r * sin(theta), 0];
- color = [0.5041,0.5218,0.7440];
- fill(x, y, color);
-
- t=linspace(0,2*pi,200);
- fill(cos(t).*.5,sin(t).*.5,'w')
-
- axis([-1.2,1.6,-1.2,1.6])
- axis equal;
- set(gca,'xticklabel',[])
- set(gca,'yticklabel',[])
-
- text(0.6,0.6,'25%')
- text(0.4,-0.75,'42%')
- text(-0.82,0.5,'33%')
- text(0.55,0.1,'42%')
- text(-0.35,-0.53,'33%')
- text(-0.55,0.4,'25%')
-
- legend('男性近视眼患病率','男性远视眼患病率','男性肥胖患病率','女性近视眼患病率','女性远视眼患病率','女性肥胖患病率','')

代码运行如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。