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

a4e7055261f16b848b1c1306f8398b66.png

用python两年多了,然而至今画图时依然会对群魔乱舞的Matplotlib对象感到困惑,尤其是看起来作用都类似的fig,ax和plt以及各种各样的subplot。

我们先来看以下三个示例

# C1

它们看起来非常相似,运行的结果也几乎一样,除了第3个有轻微不同。结果如下:

0ce3a4b7a69d1d310e486d4ecf4fb158.png
C1

0ce3a4b7a69d1d310e486d4ecf4fb158.png
C2

435cc38d9d0bc1dc8a7975b22f14c09d.png
C3

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

对代码做下简单的分析

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

这里要重点说明一下,matplotlib中,几乎所有的画图操作都是在axes上完成的。

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

gca(Get the current axes)

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

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

希望以后再遇到这些奇怪的对象和方法,你可以不用迷惑,具体该选择哪种方法取决于你的习惯。个人建议选择第3种,这种方式最为直观,在子区域很多时也不容易混淆。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值