MATPLOTLIB · 数据可视化演示

第3章 图表辅助元素的定制

以「正弦曲线 & 余弦曲线」为主线的 9 个渐进式示例,逐步叠加坐标轴标签 → 刻度 → 标题图例 → 网格 → 参考线/参考区域 → 注释文本 → 表格;并配套 6 个真实数据实例。

3.2坐标轴标签与刻度 3.3标题与图例 3.4网格 3.5参考线与参考区域 3.6注释文本 3.7表格
3.2

设置坐标轴的标签、刻度范围和刻度标签

xlabel() / ylabel() / xlim() / xticks()
3.2.1

设置坐标轴的标签

本次新增 坐标轴标签:plt.xlabel() plt.ylabel()

plt.plot(x, y1, x, y2)
# 设置 x 轴和 y 轴的标签
plt.xlabel("x轴")
plt.ylabel("y轴")
3.2.2

设置刻度范围和刻度标签

本次新增 刻度范围 + 刻度标签:plt.xlim() plt.xticks()

# 设置 x 轴的刻度范围和刻度标签
plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$',
            r'$\pi/2$', r'$\pi$'])
3.2.3

实例1:2019年内地电影票房排行榜

水平条形图 ax.barh(),y 轴刻度标签替换为 15 部电影名称。

坐标轴标签 set_xlabel("总票房(亿元)") set_ylabel("电影名称") 刻度线位置 set_yticks(y_data) 刻度标签 set_yticklabels(labels) 柱形 barh(..., height=0.2, color='orange')
3.3

添加标题和图例

title() / legend()
3.3.1

添加标题

本次新增 标题:plt.title()

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

添加图例

本次新增 图例:plt.legend()(shadow + fancybox)

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

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

饼图 plt.pie(),8 类消费支出,含标题与右侧图例。

标题 plt.title('支付宝月账单报告') 图例 plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.3, 1.1]) 饼图 plt.pie(money_scale, autopct='%3.1f%%', shadow=True, explode=dev_position, startangle=90)
3.4

显示网格

grid()
3.4.1

显示指定样式的网格

本次新增 水平网格:plt.grid(b=True, axis='y', linewidth=0.3)

# 显示网格
plt.grid(b=True, axis='y', linewidth=0.3)
3.4.2

实例3:汽车速度与制动距离的关系

散点图 plt.scatter(),x 轴刻度标签为 10~200 km/h 的速度值,并开启双向网格。

坐标轴标签 plt.xlabel('速度(km/h)') plt.ylabel('制动距离(m)') 刻度标签 plt.xticks(x_speed) 网格 plt.grid(b=True, linewidth=0.3) 散点 plt.scatter(x_speed, y_distance, s=50, alpha=0.9, linewidths=0.3)
3.5

添加参考线和参考区域

axvline() / axhline() / axvspan() / axhspan()
3.5.1

添加参考线

本次新增 参考线:plt.axvline() plt.axhline()

# 添加参考线
plt.axvline(x=0, linestyle='--')
plt.axhline(y=0, linestyle='--')
3.5.2

添加参考区域

本次新增 参考区域:plt.axvspan() plt.axhspan()

# 添加参考区域
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)
3.5.3

实例4:全校高二年级各班男女生英语成绩评估

分组柱状图 + 全体平均成绩参考线(88.5 分),直观对比各班男生 / 女生英语平均成绩。

标题 ax.set_title('高二各班男生、女生英语平均成绩') 坐标轴标签 ax.set_ylabel('分数') 刻度标签 ax.set_xticklabels(['高二1班', … , '高二6班']) 参考线 ax.axhline(88.5, ls='--', linewidth=1.0, label='全体平均成绩') 图例 ax.legend(loc="lower right")
3.6

添加注释文本

annotate() / text()
3.6.1

添加指向型注释文本

本次新增 指向型注释:plt.annotate()(带箭头)

# 添加指向型注释文本
plt.annotate("最小值",
             xy=(-np.pi / 2, -1.0),
             xytext=(-(np.pi / 2), -0.5),
             arrowprops=dict(arrowstyle="->"))
3.6.2

添加无指向型注释文本

本次新增 无指向型注释:plt.text()(带 bbox 边框)

# 添加无指向型注释文本
plt.text(3.10, 0.10, "y=sin(x)",
         bbox=dict(alpha=0.2))
3.6.3

实例5:2013—2019财年阿里巴巴淘宝和天猫平台的GMV

柱状图 + 无指向型注释文本(每根柱形上方标注具体 GMV 数值)。

坐标轴标签 plt.ylabel('GMV(亿元)') 刻度标签 tick_label=["FY2013", … , "FY2019"] 无指向型注释 plt.text(rect.get_x() + rect.get_width()/2, height + 300, s='{}'.format(height), ha='center', va='bottom') 柱形 plt.bar(x, y, tick_label=..., width=0.5)
3.7

添加表格

table()
3.7.1

添加自定义样式的表格

—— 本节完整效果(叠加全部 9 类辅助元素)

本次新增 表格:plt.table()(loc='lower right')

# 添加表格
plt.table(cellText=[[6, 6, 6], [8, 8, 8]],
          colWidths=[0.1] * 3,
          rowLabels=['第1行', '第2行'],
          colLabels=['第1列', '第2列', '第3列'],
          loc='lower right')
3.7.2

实例6:果酱面包配料比例

饼图 + 图例 + 表格,同时展示 8 种配料的比例与重量。

图例 plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.1, 1.1]) 表格 plt.table(cellText=[weight], cellLoc='center', rowLabels=['重量(g)'], colLabels=kinds, loc='lower center') 饼图 plt.pie(batching_scale, autopct='%3.1f%%')