一、三段代码:
# C1
fig = plt.figure() # figure是matplotlib中最基础的一个对象,可以理解为是一个总的画布
ax = fig.add_subplot(2,2,1) # add_subplot在画布中添加一个axes(可以理解为子区域),并返回这个子区域。
# 参数的前两个表示子区域的行列数,最后一个表示子区域的顺序
ax.plot([1,2,3]) # 在这个子区域中画图
plt.show()
# C2
fig = plt.figure() # 生成一张画布
ax = plt.subplot(2,2,1) # 和fig.add_subplot作用相同,只是直接调用plt.subplot,会获取当前活跃
# 的figure对象,然后添加子区域
ax.plot([1,2,3])
plt.show()
# C3
fig, ax = plt.subplots(2,2) # 调用subplots会直接添加多个子区域,返回的ax是一个包含所有子区域的矩阵
ax1 = ax[0,0] # 通过下标获取需要的子区域
ax1.plot([1,2,3])
plt.show()
这里要重点说明一下,matplotlib中,几乎所有的画图操作都是在axes上完成的。例如查看plt.plot()的源码,实际上是获取当前的axes然后在上面作图。
plt.xxx()方法同理,会获取当前活跃的ax或者fig对象。
二、运行结果:
C1 C2 C3三、在matplotlib中,有两种画图方式:
- plt.figure():通过plt.xxx()方法来画图(模块pyplot中的方法)。这是通过matplotlib提供的一个api,这个api提供了很多基本的function可以让你很快的画出图来,第一种方式的代码来看,先生成了一个Figure画布,然后在这个画布上隐式生成一个画图区域进行画图。但是如果你想要更细致的精调,就要使用另外一种方法。
fig = plt.figure()
ax = plt.subplot() #等价与fig.subplot()
plt.plot() #实际上是获取当前的axes然后在上面作图。
#等价与ax.plot()
plt.show()
- fig, ax = plt.subplots():正统的稍微复杂一点。指定figure和axes,然后对axes单独操作。第二种方式同时生成了Figure和axes两个对象,然后用ax对象在其区域内进行绘图。生成的fig和ax分别对画布Figure和绘图区域Axes进行控制,第一种方式反而显得不是很直观,如果涉及到子图零部件的设置,用第一种绘图方式会很难受。在实际绘图时,也更推荐使用第二种方式。
plt.style.use('Solarize_Light2')
fig, ax = plt.subplots(figsize=(12, 7))
ax.plot(dates, highs, c='red', alpha=0.5)
ax.plot(dates, lows, c='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
网友评论