# 添加标题和图例

# 添加标题

# 图表的标题代表图表名称,一般位于图表的顶部且与图表居中对齐,可以迅速地让读者理解图表要说明的内容。matplotlib 中可以直接使用 pyplot 模块的 title() 函数添加图表标题, title() 函数的语法格式如下所示:

title(label, fontdict=None, loc='center', pad=None, **kwargs)

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

# · label :表示标题的文本。
· fontdict :表示控制标题文本样式的字典。
· loc :表示标题的对齐样式,包括 'left'、'right' 和 'center' 三种取值,默认取值为 'center',即居中显示标题。
· pad :表示标题与图表顶部的距离,默认为 None。

# 此外,Axes 对象还可以使用 set_title() 方法添加图表的标题。
在 3.2.2 节绘制的正弦和余弦曲线图中添加标题“正弦曲线和余弦曲线”,增加的代码如下。

# 添加标题
plt.title("正弦曲线和余弦曲线”)

# 运行程序,效果如图 3-6 所示

image

# 添加图例

# 图例是一个列举各组图形数据标识方式的方框图,它由图例标识和图例项两个部分构成,其中图例标识是代表各组图形的图案;图例项是与图例标识对应的名称(说明文本)。当 matplotlib 绘制包含多组图形的图表时,可以在图表中添加图例,帮助用户明确每组图形代表的含义。
matplotlib 中可以直接使用 pyplot 模块的 legend() 函数添加图例,legend() 函数的语法格式如下所示 :

legend(handles, labels, loc, bbox_to__anchor, ncol, title, shadow,
       fancybox, *args, **kwargs)

# 该函数常用参数的介绍如下。

# handles 和 labels 参数

# handles 参数表示由图形标识构成的列表,labels 参数表示由图例项构成的列表。需要注意的是,handles 和 labels 参数应接收相同长度的列表,若接收的列表长度不同,则会对较长的列表进行截断处理,使较长列表与较短列表长度相等。

# loc 参数

# loc 参数用于控制图例在图表中的位置,该参数支持字符串和数值两种形式的取值,每种取值及其对应的图例位置的说明如表 3-2 所示。

image

# bbox_to_anchor 参数

# bbox_to_anchor 参数用于控制图例的布局,该参数接收一个包含两个数值的元组,其中第一个数值用于控制图例显示的水平位置,值越大则说明图例显示的位置越偏右;第二个数值用于控制图例的垂直位置,值越大则说明图例显示的位置越偏上。

# ncol 参数

# ncol 参数表示图例的列数,默认值为 1。

# title 参数

# title 参数表示图例的标题,默认值为 None。

# shadow 参数

# shadow 参数控制是否在图例后面显示阴影,默认值为 None。

# fancybox 参数

# fancybox 参数控制是否为图例设置圆角边框,默认值为 None。

# 若使用 pyplot 绘图函数绘图时已经预先通过 label 参数指定了显示于图例的标签,则后续可以直接调用 legend() 函数添加图例;若未预先指定应用于图例的标签,则后续在调用 legend() 函数时为参数 handles 和 labels 传值即可,示例代码如下。

ax.plot([1, 2, 3], label='Inline label')
ax.legend()
# 或
ax.legend((1ine1, line2, line3), ('label1', 'label2', 'label3'))

# 在 3.3.1 节绘制的正弦和余弦曲线图中添加图例,增加的代码如下。

lines = plt.plot (x, y1, x, y2)
# 添加图例
plt.legend(lines, ['正弦','余弦'], shadow=True, fancybox=True)

# 运行程序,效果如图 3-7 所示。

image

# 实例2:支付宝月账单报告(添加标题、图例)

# 图例常见于饼图中,主要用于标注饼图中每个扇形代表的含义。2.6.2 节的用户 A 某月支付宝账单报告的饼图将每个扇形的含义标注到圆外,由于标注的文字长短不一且扇形数量偏多,导致图表显得比较杂乱,因此将饼图中全部的标注文字移到图例中,具体代码如下。

In[3]:
# 02_monthly_bills_of_alipay
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
kinds =['购物', '人情往来', I'餐饮美食', '通信物流', '生活日用', 
        '交通出行', '休闲娱乐', '其他']
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, autopct='%3.1f , shadow=True,
        explode=dev_position, startangle=90)
# 添加标题
plt.title('支付宝月账单报告')
# 添加图例
plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.3, 1.1])
plt.show()

# 运行程序,效果如图 3-8 所示。

image

# 图 3-8 中,标题位于图表顶部且与图表居中对齐,图例位于图表的右上方。与图 2-17 相比,图 3-8 增加了标题和图例,有助于用户明确饼图及其每个颜色的扇形的含义。