一. 基本概念(组成)
- matplotlib组成: 由栈组成, 分为三层: Scripting(脚本), Artist(美工),Backend(后台).
- 在整个matplotlib中, 图形中所能看到的元素都属于Artist对象, 即标题, 轴标签, 刻度等组成的所有元素都是Artist对象的实例.
(1) 如果把Artist比做画画的话, Figure相当于画板, Axes(座标系)相当于画画的白纸, Axis(座标系)相当于白纸上画的座标系
所以, 可以说一个画布(figure)可以有多个Axes(座标系), 一个座标系可以有多个Axis(座标轴), 包含两个即为2D座标系, 包含三个即为3D座标系.
(2) Subplot实际上是axes的特例(子集) , 就是一个画布上多画几个Axes(座标系),再缩小到特定位置,就是Subplot了. 相当于MATLAB中的一个图中有好几个座标系
二. 入门应用
1. 绘制直线
import matplotlib.pyplot as plt
# 当plot中参数只有一个列表时, 列表中数字代表纵座标, 横座标从0开始
plt.plot([4, 6, 3, 6, 8, 7])
plt.show()
import matplotlib.pyplot as plt
# 当plot中参数有两组列表时, 第一组代表横座标, 第二组代表纵座标
plt.plot([0, 1, 2, 3, 4, 5, ], [1, 2, 3, 4, 5, 6])
plt.show()
2. 简单应用: 绘制温度变化折线图
import matplotlib.pyplot as plt
import random
# 生成fig画布在上面画图. figsize为设置图片尺寸, dpi为设置图片透明度, 数字越大透明度越高
plt.figure(figsize=(20, 8), dpi=80)
# 编码中文显示问题, 输入这两行代码可以让图中的中文正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 准备x, y座标的数据
x = range(60) # 横座标
# 上海天气纵座标
y_shanghai = [random.uniform(15, 18) for i in x]
# 北京天气纵座标
y_beijing = [random.uniform(3, 5) for i in x]
# 横座标时间数据
x_ch = ["11点{}分".format(i) for i in x]
# 纵座标数据
y_ticks = range(40)
# 上海折线图绘制
plt.plot(x, y_shanghai, label='上海')
# 北京折线图绘制(x为x轴, y_beijing为y轴, color为线条颜色, linestyle为线条样式, label为绑定标签'北京')
plt.plot(x, y_beijing, color='r', linestyle='--', label='北京')
# 显示刻度, 间隔(步长)
plt.xticks(x[::5], x_ch[::5]) # 横座标步长间隔5
plt.yticks(y_ticks[::5]) # 横座标步长间隔5
# 曲线图的各种属性
plt.xlabel("时间") # 横座标属性
plt.ylabel("温度") # 纵座标属性
plt.title("一些城市的温度变化曲线图") # 座标轴标题
# 图中加入注释(图片右上角标志)
plt.legend(loc="best")
# 保存图片(我的图片位置为: C:\Users\admin)
plt.savefig("matplotlib.png")
# 显示
plt.show()
运行结果如下图 :