plt.subplots解释

本文详细解析了Matplotlib中子图的使用方法,包括参数解释、返回值说明及代码示例,帮助读者掌握如何在一张图像中绘制多个图表。

首先一幅Matplotlib的图像组成部分介绍。

在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个或者多个Axes对象。每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域。所属关系如下:

def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
             subplot_kw=None, gridspec_kw=None, **fig_kw):

参数

nrows,ncols:

  • 子图的行列数。

sharex, sharey:

  • 设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴,
  • 设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立,
  • 设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴,
  • 设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴。

squeeze:

  • 默认为 True,是设置返回的子图对象的数组格式。
  • 当为 False 时,不论返回的子图是只有一个还是只有一行,都会用二维数组格式返回他的对象。
  • 当为 True 时,如果设置的子图是(nrows=ncols=1),即子图只有一个,则返回的子图对象是一个标量的形式,如果子图有(N×1)或者(1×N)个,则返回的子图对象是一个一维数组的格式,如果是(N×M)则是返回二位格式。

subplot_kw:

gridspec_kw:

  • 字典格式,传递给 GridSpec 的构造函数,用于创建子图所摆放的网格。
  • class matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
  • 如,设置 gridspec_kw={'height_ratios': [3, 1]} 则子图在列上的分布比例是3比1。

**fig_kw :

  • 所有其他关键字参数都传递给 figure()调用。
  • 如,设置 figsize=(21, 12) ,则设置了图像大小。


返回值
fig: matplotlib.figure.Figure 对象
ax:子图对象( matplotlib.axes.Axes)或者是他的数组

 

------------本文来自 tz_zs 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/tz_zs/article/details/81069499

 

代码示例:

实例代码是笔者修改MaskRCNN的图片展示类的源码:

修改的目标是同时展示原图和效果图

auto_show = False
    if not ax:
        _, (ax1,ax) = plt.subplots(1,2,figsize=(15,15))
        auto_show = True

height, width = image.shape[:2]
    ax.set_ylim(height + 10, -10)
    ax.set_xlim(-10, width + 10)
    ax.axis('off')
    ax.set_title(title)

    ax1.set_ylim(height + 10, -10)
    ax1.set_xlim(-10, width + 10)
    ax1.axis('off')
    ax1.set_title("Base_image")

 ax.imshow(masked_image.astype(np.uint8))
    ax1.imshow(image.astype(np.uint8))
    if auto_show:
        plt.show()

效果:同时展示了图片

感谢:上文中引用的大佬博客

总结:自己对库的api还是太不熟悉了,这小小的问题憋了好长时间没解决,还是得多看看文档

### Matplotlib `plt.subplots` 错误排查 在使用 `matplotlib` 的 `plt.subplots` 函数时,可能会遇到种错误。以下是一些常见的错误原因及解决方法: 1. **模块未正确导入** 确保已经正确导入了 `matplotlib.pyplot` 模块。如果缺少导入语句或导入不完整,会导致函数不可用。例如: ```python import matplotlib.pyplot as plt ``` 如果没有正确导入模块,调用 `plt.subplots` 会抛出 `NameError`[^1]。 2. **参数错误** `plt.subplots` 的常见用法如下: ```python fig, axs = plt.subplots(nrows=1, ncols=2) ``` 如果传递的参数类型或值不符合预期(如传递非整数给 `nrows` 或 `ncols`),会引发 `TypeError` 或其他异常。确保参数符合官方文档中的定义[^4]。 3. **内存或资源限制** 如果创建了过的子,可能会导致内存不足或资源耗尽的问题。在这种情况下,可以尝试减少子的数量或优化代码逻辑。例如: ```python fig, axs = plt.subplots(100, 100) # 不推荐,可能导致内存问题 ``` 4. **后端配置问题** Matplotlib 使用不同的后端来渲染形。某些后端可能与当前环境不兼容,导致错误。可以通过设置后端来解决此问题: ```python import matplotlib matplotlib.use('Agg') # 设置为非交互式后端 import matplotlib.pyplot as plt fig, axs = plt.subplots() ``` 如果仍然报错,建议检查当前环境中是否支持所选后端[^1]。 5. **版本兼容性问题** 不同版本的 Matplotlib 可能存在 API 差异。确保使用的语法与当前安装的 Matplotlib 版本兼容。可以通过以下命令检查版本: ```python import matplotlib print(matplotlib.__version__) ``` 6. **示例代码** 下面是一个正确的 `plt.subplots` 示例: ```python import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 100) # 创建一个 2x2 的子布局 fig, axs = plt.subplots(2, 2, figsize=(8, 6)) # 绘制每个子的内容 axs[0, 0].plot(x, np.sin(x)) axs[0, 0].set_title('Sine Wave') axs[0, 1].plot(x, np.cos(x), 'r') axs[0, 1].set_title('Cosine Wave') axs[1, 0].plot(x, np.tan(x), 'g') axs[1, 0].set_title('Tangent Wave') axs[1, 1].plot(x, np.exp(-x), 'k') axs[1, 1].set_title('Exponential Decay') # 调整子间距 plt.tight_layout() # 显示plt.show() ``` 7. **调试技巧** 如果错误信息不够明确,可以尝试逐步调试代码。例如,先单独测试 `plt.subplots` 的基本功能,再逐步添加复杂逻辑。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值