每次绘图时会自动创建一个图窗(Figure),在图窗上进行相关操作,与matlab比较类似。
每一个figure包含了一个或多个axes(子图)。
最简单的创建figure以及axes的方式是通过pyplot.subplots命令,创建axes以后,可以使用Axes.plot绘制最简易的折线图。
以下两种oo方式(面向对象)均可以绘制折线图,并且对返回对象进行赋值操作。
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
map = ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
fig, ax = plt.subplots() # 创建一个包含一个axes的figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 绘制图像
plt.show()
也可以直接进行绘制,即不新建图窗与子图,直接进行绘制:
line =plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
一个图框由四个层级组成,自上而下分别为:
Figure(图窗):顶层级,用来容纳所有绘图元素;
Axes(子图):容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成;
Axis(坐标轴):axes的下属层级,用于处理所有和坐标轴,网格有关的元素;
Tick(刻度):axis的下属层级,用来处理所有和刻度有关的元素。
matplotlib提供了两种最常用的绘图接口
1、显式绘图法:显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style) ,即面向对象操作方式。
2、隐式绘图法:不直接创建figure和axes,依赖pyplot自动创建figure和axes,并绘图。
显式绘图法:更加有条理,提前完成图窗与子图的赋值,便于后续操作,但也会略显复杂,适合大量复杂绘图操作的情景;
隐式绘图法:方便快捷,适合简单的单图操作情景,但在多图复杂场景下易混乱,因为各个子图均使用一个对象赋值(plt)。
一般情况下,pyplot方法多用于交互式绘图(如Jupyter notebook中);
而object-oriented方法多用于非交互式绘图(作为大型项目的一部分重用的函数和脚本)。
事实上,隐式绘图法,pyplot绘图模式,使用plot()函数或者其他绘图函数,如果没有现成图像对象,直接会先创建图像对象。
两种绘图方法代码如下:
# 显式创建figure和axes 绘图方法
x = np.linspace(0, 2, 100)
fig, ax = plt.subplots()
ax.plot(x, x, label='linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
plt.show()
# 隐式创建方法
x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
即一般的绘图流程,初学者刚开始学习时只需要牢记这一模板就足以应对大部分简单图表的绘制,在学习过程中可以将这个模板模块化,了解每个模块在做什么,在绘制复杂图表时如何修改,填充对应的模块。
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考第三章进一步学习
fig, ax = plt.subplots()
# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
ax.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()
plt.show()
# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2
# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')
# step3 定义布局, 这一模块的扩展参考第三章进一步学习
plt.subplot()
# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear')
# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()