代码之家  ›  专栏  ›  技术社区  ›  goaran

动态子地块尺寸

  •  0
  • goaran  · 技术社区  · 3 月前

    我想画几个次要情节。根据数据,它可能是一个N x M的绘图阵列,但也可能只有一个绘图或1 x M或N x 1阵列。

    我使用的代码如下所示,适用于m x N个数组。然而,如果M或N或两者都是1,我会得到错误: matplotlib IndexError:数组的索引太多:数组是一维的,但有2个索引

    当然,我可以为4种不同的可能性做一个切换案例,但一定有更好的方法吗?

    fig, axs = plt.subplots(max_N, max_N)
    
        for N in range(max_N):
            for M in range(max_N):
            axs[N, M].plot(...)
    
    1 回复  |  直到 3 月前
        1
  •  1
  •   tmdavison    3 月前

    您可以设置 squeeze kwarg选项到 False 使用时 plt.subplots 。来自 docs :

    挤压 : bool , 违约 : 真的

    • 如果为True,则从返回的轴数组中挤出额外的维度:
      • 如果只构造了一个子地块(nrows=ncols=1),则生成的单个Axes对象将作为标量返回。
      • 对于Nx1或1xM子地块,返回的对象是Axes对象的1D numpy对象数组。
      • 对于NxM;1和M>1作为2D阵列返回。
    • 如果为False,则根本不进行挤压:返回的Axes对象始终是包含Axes实例的2D数组,即使它最终为1x1。

    所以通过设置 squeeze=False ,将始终具有二维阵列,即使其中一个或两个轴都只有一个元素。对于您的代码:

    fig, axs = plt.subplots(max_N, max_N, squeeze=False)