Matplotlib 饼状图

饼图只能显示一个Series结构数据。饼图显示一个 Series 数据中项目(称为楔形)的大小,与项目总和成正比。饼图中的数据点显示为整个饼图的百分比。

可以使用 pyplot 中的 pie() 方法来绘制饼状图。pie() 可生成表示数组中数据的饼图。每个楔形的分数面积由x/sum(x) 给出。如果 sum(x)< 1,则 x 的值直接给出小数区域,数组不会被归一化。生成的饼图将有一个大小为 1 - sum(x) 的空楔。

pie() 方法语法格式如下:

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=None, data=None)[source]

参数说明:

  • x:浮点型数组,表示每个扇形的面积。
  • explode:数组,表示各个扇形之间的间隔,默认值为0。
  • labels:列表,各个扇形的标签,默认值为 None。
  • colors:数组,表示各个扇形的颜色,默认值为 None。
  • autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
  • labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
  • pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
  • shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
  • radius::设置饼图的半径,默认为 1。
  • startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
  • counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
  • wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
  • textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
  • center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
  • frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。

下面我们先生成一个普通的饼状图

import matplotlib.pyplot as plt
import numpy as np

y = np.array([36, 24, 27, 13])

plt.pie(y)
plt.show()

图形如下

matplotlib-普通饼状图

接下来我们修改每块儿区域的颜色

import matplotlib.pyplot as plt
import numpy as np

y = np.array([36, 24, 27, 13])

plt.figure("迹忆客 - jiyik.com");
plt.title("JIYIK 饼状图")

plt.pie(y, labels=['A', 'B', 'C', 'D'],  # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],  # 设置饼图颜色
        )
plt.show()

图形如下

matplotlib-自定义颜色饼状图

最后使用以下代码显示注册各种计算机语言课程的学生列表的饼状图。在 autopct=%1.2f%参数的帮助下,比例百分比显示在相应的楔形内。

from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.pie(students, labels = langs,autopct='%1.2f%%')
plt.show()

图形如下

matplotlib-高级饼状图

查看笔记

扫码一下
查看教程更方便