【python】matplotlib 模块_plt. /ax./ fig

目录

前言

plt. /ax.

定义

对比一

 对比二


前言

matplotlib 架构上分为三层。
底层:backend layer
中层:artist layer
最高层:scripting layer

在任意一层操作都能够实现画图的目的,而且画出来还都一样。但越底层的操作越细节,越高层越易于人机交互。

  • .plt 对应的就是最高层 scripting layer。这就是为什么它简单上手,但要调细节就不灵了。
  • ax.plot 是在 artist layer 上操作。基本上可以实现任何细节的调试。
  • backend layer, 至今,我还没有见有人在这个layer上操作过。

查看plt.plot()的源码,实际上是获取当前的axes然后在上面作图。

另外,对于axes (翻译就是 坐标系),如果大家学过大学物理的话,会知道每一个物体都有一个独立的坐标系。而matplotlib 就是引用这一理念。所以在artist layer上画多条曲线时,会用 ax1.plot, ax2.plot ... 而最后显示在一张图上是因为所有独立坐标系对齐的结果。

plt. /ax.

定义

plt.figure(): plt.***系列。通过 plt.x 来画图,其实是取了一个捷径。这是通过matplotlib提供的一个api,这个plt提供了很多基本的function可以让你很快的画出图来,但是如果你想要更细致的精调,就要使用另外一种方法。

# 示例:
import matplotlib.pyplot as plt
A=1, 2, 3
B=2, 2, 2
plt.figure(1)
plt.subplot(232)
plt.plot(A,B)
plt.show()

 

fig, ax = plt.subplots(): 这个就是正统的稍微复杂一点的画图方法了。指定figure和axes,然后对每一个axes单独操作。

# 示例:
import matplotlib.pyplot as plt
A=1, 2, 3
B=2, 2, 2
fig, ax = plt.subplots(2,3)
ax[0,1].plot(A,B)
plt.show()

 

对比一

import matplotlib.pyplot as plt 
import numpy as np
x=np.arange(1,10)
y=x**2

# plt.plot()示例
plt.figure()
plt.plot(x,y)  
plt.show() 

# ax.plot()示例
fig,ax=plt.subplots()
ax.plot(x,y)
plt.show()

 输出结果:

结果是一样的,区别在于:

  • plt.plot()先生成一个figure画布,然后在这个画布上隐式生成的画图区域上画图
  • ax.plot()同时生成了fig和ax对象,然后用ax对象在其区域上画图,推荐使用该方式

 对比二

# 示例1
fig = plt.figure()          # figure是matplotlib中最基础的一个对象,是一个总的画布
ax = fig.add_subplot(2,2,1) # add_subplot在画布中添加一个axes(可以理解为子区域),并返回这个子区域参数的前两个表示子区域的行列数,最后一个表示子区域的顺序
ax.plot([1,2,3])            # 在这个子区域中画

# 示例2
fig = plt.figure()
ax = plt.subplot(2,2,1)     # 和fig.add_subplot作用相同,只是直接调用plt.subplot,会获取当前活跃的figure对象,然后添加子区域
ax.plot([1,2,3])

# 示例3
fig, ax = plt.subplots(2,2) # 调用subplots会直接添加多个子区域,返回的ax是一个包含所有子区域的矩阵
ax1 = ax[0,0]               # 通过下标获取需要的子区域
ax1.plot([1,2,3])

从结果我们看到,3个代码都在图的左上角区域画了一个直线图,不同的是前两个图把其他区域空了出来,而第3个子图把余下的子区域都分好了。

第3种,这种方式最为直观,在子区域很多时也不容易混淆。


matplotlib:先搞明白plt. /ax./ fig再画

Matplotlib画图中fig,ax,plt的区别和联系 

猜你喜欢

转载自blog.csdn.net/m0_70813473/article/details/130892560