一、引言
在做数据可视化过程中,圆饼统计图因其直观效果好而被广泛采用。Matlab提供了pie和pie3来绘制圆饼统计图。为了让圆饼统计图显示的显示信息更丰富,可以增加某一块的分离突出显示,也可以显示数据项的标识符,或者突出显示某个数据项的标识符。
二、pie
基本语法:
pie(X)
pie(X,labels)
pie(X,explode)
pie(X,explode,labels)
其中X表示已知的数据,explode表示哪个或哪几个数据项需要突出显示,labels表示每个数据项的标识字符串,必须是字符向量元胞数组。
示例1:已知一组数据中每个数据项的次数,根据数据项的次数绘制预案并统计图
t=[ 1 5 3 ]
pie(t)
运行结果为:
示例2:在示例1的基础上增加数据项的标识
t=[ 1 5 3 ]
label = { 'dog', 'hot', 'log' };%此处必须是细胞数组
pie( t, label )
运行结果为:
此时可以看到示例1运行结果中的百分比换为了数据项的标识。
示例3:在示例2的基础上突出显示第1项数据项的标识
t=[ 1 5 3 ]
label = { 'dog', 'hot', 'log' };%此处必须是细胞数组
h = pie( t, label )%画图同时获得图形句柄
%对第一个数据项的标识进行突出显示
s = h(2);%对本题,句柄实际包含6项,其中偶数项是数据项的标识
s.BackgroundColor = 'b';
s.EdgeColor = 'r';
s.FontSize = 20;
运行结果为:
示例4:在示例1的基础上增加数据项3的突出显示
t=[ 1 5 3 ]
ex = [ 0, 0, 1 ];%非0的位置突出显示
pie( t, ex )
运行结果为:
从运行结果可以看出数据项3突出显示了。
示例5:在示例2的基础上增加数据项1的突出显示
t=[ 1 5 3 ]
label = { 'dog', 'hot', 'log' };%此处必须是细胞数组
ex = [ 1, 0, 0 ];%非0的位置突出显示
pie( t, ex, label )
运行结果为:
从运行结果可以看出数据项1突出显示了。
示例6:给定一组数据(数值型),统计其中没个数据项出现的次数,据此绘制圆饼统计图,
1)首先随机生成一组数据,并取整
t = rand( 1, 20 );
t = fix(t * 10);
2)统计不同的数据及其出现的次数
ua = unique(t) %统计不同的数据
stat = hist( t, ua ) %统计每个数据出现的次数
3)绘制圆饼统计图
pie( stat )
4)在圆饼统计图上显示每个数据项的数字
utC = string( ut ) %将ut转换成字符串数组
dataC = cellstr( utC )%将字符串转换成字符向量元胞数组
5)绘制带有标识的圆饼统计图
pie( stat, utC )
6)指定某第三分之一位置的数据项突出显示
len = length( ut )
ex = zeros( size(ut) );
loc = fix( len / 3 )
ex( loc ) = 1;
pie( stat, ex, utC )
7)完整代码及运行结果如下:
clear all
clc
format compact
t = rand( 1, 20 );
t = fix(t * 10);
ut = unique(t)
stat = hist( t, ut )
pie( stat )
figure;
utC = string( ut )
dataC = cellstr( utC )
pie( stat, utC )
figure;
len = length( ut )
ex = zeros( size(ut) );
loc = fix( len / 3 )
ex( loc ) = 1;
pie( stat, ex, utC )
运行结果:
三、pie3
其用法与pie用法一样,只是显示结果是三维图。
示例7:把示例2和示例4改用pie3实现
clear all
clc
t=[ 1 5 3 ]
label = { 'dog', 'hot', 'log' };%此处必须是细胞数组
h1 = pie3( t, label )%画图同时获得图形句柄
%对第一个数据项的标识进行突出显示
s = h1(4);%对本题,句柄实际包含12项,其中第4、8、12项是数据项的标识
s.BackgroundColor = 'b';
s.EdgeColor = 'r';
s.FontSize = 20;
figure;
ex = [ 0, 0, 3 ];%非0的位置突出显示
h2 = pie3( t, ex, label )
%对第三个数据项的标识进行突出显示
s = h2(12);
s.BackgroundColor = 'y';
s.EdgeColor = 'r';
s.FontSize = 20;
运行结果: