在这里插入图片描述

饼图:

饼图(pie plot),或称饼状图,在日常的工作、商业活动、数据分析等领域中饼图是应用最广泛的一种数据展示的方式,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆弧)的加和等于100%。

pie函数

  1. 函数定义:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=True, data=None)
  1. 常用参数:
  • x:指定绘图的数据,每一份数据会按照X/SUM(X)的比例进行划分;

  • explode:指定饼图某些部分的突出显示,即呈现爆炸式;

  • labels:为饼图添加标签说明,类似于图例说明;

  • colors:指定饼图的填充色;

  • autopct:自动添加百分比显示,可以采用格式化的方法显示;

  • pctdistance:设置百分比标签与圆心的距离;

  • shadow:是否添加饼图的阴影效果;

  • labeldistance:设置各扇形标签(图例)与圆心的距离;

  • startangle:设置饼图的初始摆放角度;

  • radius:设置饼图的半径大小;

  • counterclock:是否让饼图按逆时针顺序呈现;

  • wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;

  • textprops:设置饼图中文本的属性,如字体大小、颜色等;

  • center:指定饼图的中心点位置,默认为原点

  • frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

pie的详细定义:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html

示例说明:

通过夏季宵夜的销售占比进行示例说明:

import matplotlib.pyplot as plt
import matplotlib

"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

#设置大小
plt.rcParams['figure.figsize']=[10,10]
#定义饼状图的标签,标签是列表
labels =[ '麻辣小龙虾','炭烤生蚝','花毛一体','麻辣田螺']
#每个标签占多大,会自动按照百分比绘制
data = [15,30,45,10]
# 绘制饼图
plt.pie(data,labels=labels)

plt.show()

运行结果:
在这里插入图片描述

扩展应用

饼图常用属性

在绘制饼图的时候增加图例,数据标签,以及增加相应的显示效果

换种方式来设置颜色,通过get_cmap函数来选择matplotlib预定义的colormap设置颜色,具体后续会专门写一篇文章进行介绍。

  • colormap的介绍
    https://matplotlib.org/stable/tutorials/colors/colormaps.html?highlight=colormap
  • get_cmap函数定义
matplotlib.cm.get_cmap(name=None, lut=None)

官网介绍:https://matplotlib.org/stable/api/cm_api.html#matplotlib.cm.get_cmap

import matplotlib.pyplot as plt
import matplotlib

"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
#设置大小
plt.rcParams['figure.figsize']=[10,10]
#定义饼状图的标签
labels =[ '麻辣小龙虾','炭烤生蚝','花毛一体','麻辣田螺']
#每个标签占比,会自动按照x/sum(x)所占百分比绘制
data = [15,30,45,10]
#对比各个部分的凸显程度
explode = (0,0.1,0.2,0.3) 
"""
autopct='%.0f%%' 显示百分比
textprops = {'fontsize':30, 'color':'k'} 大小为30,颜色为黑色
explode=explode 饼图某些部分的突出显示
shadow=True 显示阴影
startangle,起始角度,0,表示第一块从0开始逆时针转.
pctdistance,百分比的文本离圆心的距离为
"""
#选择tab20c的色彩,
cmap = plt.get_cmap("tab20c")
#选择tab20c中的4种颜色
color=cmap([1,3,6,9])
plt.pie(x=data, colors=ccolor,labels=labels,textprops = {'fontsize':12, 'color':'k'},
        explode=explode, shadow=True,startangle=30, autopct="%0.2f%%",
       pctdistance = 0.5)
# 显示图例
plt.legend()
# 展示
plt.show()

运行结果:
在这里插入图片描述

甜甜圈图表

甜甜圈图,又称之为环形图,是饼图的一种变体,是指将两个及以上的大小不一的饼图叠在,挖去中间部分构成的图形,本质是饼图将中间区域挖空。
对比饼图,甜甜圈图能够比较方便的对比各个不同的图形,而不是将注意力关注在饼图的各个扇形所占整体比重上,一般来说饼图很难进行多个饼图直接的对比,而且饼图的空间利用率不如甜甜圈图,甜甜圈图内部空心部分可以显示文本信息,标题等

甜甜圈图是在饼图的基础上通过wedgeprops来控制饼图内外边界的属性进行数据的展示。以家庭开支为例进行说明,其中分为内环和外环进行嵌套,来展示两个大类的数据占比情况。

import matplotlib.pyplot as plt
import matplotlib

"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
fig, ax = plt.subplots()

size = 0.3

category =[60,30,10]
category_labels=["女主","小孩","男主"]
detail=[30,30,20,10,5,5]
detail_labels=["化妆品","衣服","玩具","零食 ","电子产品","游戏"]

#获取需要填充的颜色
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])

#外圈成员开支分类,wedgeprops控制圆环的宽度
ax.pie(category, radius=1, colors=outer_colors,labels=category_labels,
       textprops = {'fontsize':15, 'color':'black'},
       wedgeprops=dict(width=size, edgecolor='w'))

#内圈各个成员开支细分,wedgeprops控制圆环的宽度
ax.pie(detail, radius=1-size, colors=inner_colors,labels=detail_labels,
       textprops = {'fontsize':12, 'color':'w'},
       wedgeprops=dict(width=size, edgecolor='w'))

ax.set(aspect="equal", title='家庭开支比例')
plt.legend()
plt.show()

运行结果:
在这里插入图片描述


总结

饼图的主要使用场景是用于反映数据构成的比例关系。

饼图的缺点:

  • 饼图不适用于多分类的数据

因为随着分类的增多,每个切片就会变小,最后导致大小区分不明显,每个切片看上去都差不多大小,这样对于数据的对比是没有什么意义的。所以饼图不适合用于数据量大且分类很多的场景。

  • 相比于具备同样功能的其他图表(比如百分比柱状图),饼图需要占据更大的画布空间。
  • 很难进行多个饼图之间的数值比较。

饼图和柱状图区别

  • 饼图主要是展示分类之间的占比情况。
  • 而柱状图主要展示各个分类数量、大小的对比
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐