# 绘制饼图或圆环图

# 使用 pie() 绘制饼图或圆环图

# 使用pyplot 的 pie() 函数可以快速地绘制饼图或圆环图,pie() 函数的语法格式如下所示 :

pie(x, explode=None, labels=None, autopct=None,
    pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
    radius=None, counterclock=True, wedgeprops=None, textprops=None,
    center=(0, 0), frame=Falser, rotatelabels=False, *, data=None)

# 该函数常用参数的含义如下。

# · x :表示扇形或楔形的数据。
· explode :表示扇形或楔形离开圆心的距离。
· labels :表示扇形或楔形对应的标签文本。
· autopct :表示控制扇形或楔形的数值显示的字符串,可通过格式字符串指定小数点后的位数。
· pctdistance :表示扇形或楔形对应的数值标签距离圆心的比例,默认为 0.6。
· shadow :表示是否显示阴影。
· labeldistance :表示标签文本的绘制位置 ( 相对于半径的比例 ),默认为 l.l。
· startangle :表示起始绘制角度,默认从 X 轴的正方向逆时针绘制。
· radius :表示扇形或楔形的半径。
· wedgeprops :表示控制扇形或楔形属性的字典。例如,通过 wedgeprops = {'width':0.7}将楔形的宽度设为 0.7。
· textprops :表示控制图表中文本属性的字典。
· center :表示图表的中心点位置,默认为 (0,0)。
· frame :表示是否显示图框。

# 例如,使用 pie() 函数绘制一个饼图,代码如下。

In [16]:
import numpy as np
import matplotlib.pyplot as plt
data = np.array ( [20, 50, 10, 15, 30, 55] )
pie_labels = np.array([ 'A', 'B', 'C', 'D', 'E', 'F' ])
# 绘制饼图:半径为 0.5, 数值保留 1 位小数
plt.pie(data, radius=l.5, labels=pie__labels, autopct='%3.1f%%')
plt.show ( )

# 例如,使用 pie() 函数绘制一个圆环图,代码如下。

In [17]:
import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie labels = np.array (['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制圆环图:外圆半径为1.5,楔形宽度为0.7
plt.pie(data, radius=l.5, wedgeprops={'width': 0.7}, labels=pie_labels,
        autopct='%3.1f%%', pctdistance=0.75)
plt.show()

# 两个示例运行的效果如图 2-16 所示。

image

# 实例 6:支付宝月账单报告

# 近年来随着移动支付 App 的出现,人们的生活发生了翻天覆地的变化,无论是到超市选购商品,还是跟朋友聚餐,或是来一场说走就走的旅行,都可以使用移动支付 App 轻松完成支付,非常便捷。支付宝是人们使用较多的移动支付方式,它拥有自动记录每月账单的功能,可以方便用户了解每月资金的流动情况。例如,用户 A 某月使用支付宝的消费明细如表 2-5 所示。

image

# 根据表 2-5 的数据,将 “分类” 一列的数据作为饼图的标签,将各分类对应的金额与总支出金额的比例作为饼图的数据,使用 pie() 函数绘制用户 A 某月支付宝消费情况的饼图,具体代码如下。

In [18]:
# 06_monthly_bills_of_alipay
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 饼图外侧的说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用',
         '交通出行', '休闲娱乐', '其他']
# 饼图的数据
money_scale = [800 / 3000, 100 / 3000, 1000 / 3000, 200 / 3000,
               300 / 3000, 200 / 3000, 200 / 3000, 200 / 3000]
dev__position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
# 绘制饼图
plt.pie(money_scale, labels=kinds, autopct='%3.1f%%', shadow-True,
        explode=dev_position, startangle=90)
plt.show()

# 运行程序,效果如图 2-17 所示。

image

# 由图 2-17 可知,绿色扇形的面积最大,说明餐饮美食方面的支出在当月总支出中占比最大 ;橙色扇形的面积最小,说明人情往来的支出在当月总支出中占比最小。