第五章 使用 matplotlib 绘制饼图

系列文章目录

第一章 使用 matplotlib 绘制折线图
第二章 使用 matplotlib 绘制条形图
第三章 使用 matplotlib 绘制直方图
第四章 使用 matplotlib 绘制散点图
第五章 使用 matplotlib 绘制饼图
第六章 使用 matplotlib 绘制热力图
第七章 使用 matplotlib 绘制堆叠条形图
第八章 使用 matplotlib 在一个画布内绘制多个图

文章目录

  • 系列文章目录
  • 前言
  • 一、什么是饼图?
  • 二、饼图的绘制
  • 三、应用场景
    • 1.适用场景
    • 2.不适用场景
  • 四、总结


前言

上一章我们讲述了散点图的绘制,本章我们来讲述饼图的绘制。


一、什么是饼图?

饼图,或称饼状图,是一个将圆形划分为几个扇形的统计图表。在饼图中,每个扇形的弧长大小,表示该种类占总体的比例,这些扇形合在一起刚好是一个完整的圆形。

饼图最显著的功能在于表现”占比“。习惯上,人们也用饼图来比较扇形的大小,从而获得对数据的认知。但是,由于人类对“角度”的感知力并不如“长度”,在需要准确的表达数值(尤其是当数值接近、或数值很多)时,饼图常常不能胜任,建议用柱状图代替。

使用时,须确认各个扇形的数据加起来等于 100%;避免扇区超过 5 个,尽量让图表简洁明了。


二、饼图的绘制

下面我们通过例子来看饼图的绘制,示例代码如下:

import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

languages = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java']
popularity = [59219, 55466, 47544, 36443, 35917]

plt.pie(popularity)

plt.tight_layout()
plt.show()

在上面的代码中,我们只要将一个列表传入到 pie 函数中,便可以绘制一个饼图。代码执行后得到的图形如下图所示:
第五章 使用 matplotlib 绘制饼图_第1张图片
从上面的饼图中我们不知道每个扇形所代表的数据,下面来为每个扇形打上标签。

import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

languages = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java']
popularity = [59219, 55466, 47544, 36443, 35917]

plt.pie(popularity, labels=languages)

plt.tight_layout()
plt.show()

为了给每个扇形打上标签,我们只需要传入参数 labels 即可。代码执行后得到的图形如下图所示:
第五章 使用 matplotlib 绘制饼图_第2张图片
除了给每个扇形打上标签之外,我们还可以把每个扇形的占比标在图形上,示例代码如下:

import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

languages = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java']
popularity = [59219, 55466, 47544, 36443, 35917]

plt.pie(popularity, labels=languages, autopct='%1.1f%%')

plt.tight_layout()
plt.show()

上面的代码中,我们通过参数 autopct 为每个扇形标上占比。代码执行后得到的图形如下图所示:
第五章 使用 matplotlib 绘制饼图_第3张图片
上图中扇形从大到小排列的方向是逆时针的,一般情况下,我们比较习惯顺时针的方向,下面我们通过参数来设置成顺时针方向,示例代码如下:

import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

languages = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java']
popularity = [59219, 55466, 47544, 36443, 35917]

plt.pie(popularity, labels=languages, autopct='%1.1f%%', counterclock=False, startangle=90)

plt.title('top5 编程语言占比')
plt.tight_layout()
plt.show()

上面代码中,通过设置参数 counterclock 为 False,使得方向改为顺时针方向,通过设置参数 startangle 为 90,将最大扇形放在 12 点钟方向。代码执行后得到的图形如下图所示:
第五章 使用 matplotlib 绘制饼图_第4张图片
有时候,为了强调某一个扇形,我们会让这个扇形脱离整个圆形。示例代码如下:

import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

languages = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java']
popularity = [59219, 55466, 47544, 36443, 35917]

plt.pie(popularity, labels=languages, autopct='%1.1f%%', 
        counterclock=False, startangle=90,explode=[0,0,0.1,0,0])

plt.title('top5 编程语言占比')
plt.tight_layout()
plt.show()

在上面的代码中,我们通过设置参数 explode 来强调 SQL 这个扇形,要强调那个扇形,就把相应的值设置成非 0。代码执行后得到的图形如下图所示:
第五章 使用 matplotlib 绘制饼图_第5张图片


三、应用场景

1.适用场景

  • 想要突出表示某个部分在整体中所占比例,尤其该部分所占比例达到总体的25%或50%时。
  • 分类数量最好小于5个。
  • 各不同分类间的占比差异明显。
  • 需要确定的图表绘制空间大小(不会随着分类增多有增大画布空间)。

2.不适用场景

  • 如果变量之间相互独立,并不构成一个整体,那么不可以使用饼图。
  • 饼图不能用来表现趋势。
  • 由于饼图用面积取代了长度,从而加大了对各个数据进行比较的难度。因此,当需要对数据进行比较,分清孰大孰小,尤其是当数据接近时,条形图更加合适。
  • 当类别过多时,不建议使用饼图,否则阅读将会很差。

四、总结

本章我们讲述了饼图的绘制以及饼图的适用场景和不适用场景。

上一章 使用 matplotlib 绘制散点图

你可能感兴趣的:(python,数据分析,数据可视化,python,数据分析,数据可视化,matplotlib,饼图)