Python 3.x Matplotlib子图:在对齐宽度时删除未打印的子图

Python 3.x Matplotlib子图:在对齐宽度时删除未打印的子图,python-3.x,matplotlib,plot,Python 3.x,Matplotlib,Plot,我想为每个个体绘制子图,每个个体都有不同数量的子图,并且每个个体的最大子图为5。因此,下面的len(arr)可以是0到5之间的任意值 x = np.array([1,2,3,4]) y = np.array([1,2,3,4]) arr = np.array([[x,y], [x,y]]) # len of 2 fig, axs = plt.subplots(nrows=1,ncols=5,figsize=(12,4)) for i in range(min(len(arr),5)):

我想为每个个体绘制子图,每个个体都有不同数量的子图,并且每个个体的最大子图为5。因此,下面的
len(arr)
可以是0到5之间的任意值

x = np.array([1,2,3,4])
y = np.array([1,2,3,4])
arr = np.array([[x,y], [x,y]]) # len of 2
fig, axs = plt.subplots(nrows=1,ncols=5,figsize=(12,4))
for i in range(min(len(arr),5)):
    axs[i].plot(arr[i][0], arr[i][1])

在上面的例子中,个体有2个子批次。如何删除没有任何值的子地块,同时保持2个子地块的宽度?如果可能,将它们对齐在“画布”的中心


您的代码应编辑为:

x = np.array([1,2,3,4])
y = np.array([1,2,3,4])
arr = np.array([[x,y], [x,y]]) # len of 2

# or
# arr = np.array([[x,y], [x,y], [2*x, y]]) # len of 3

fig, axs = plt.subplots(nrows=1,ncols=len(arr),figsize=(12,4))
for i in range(min(len(arr), len(arr))):
    axs[i].plot(arr[i][0], arr[i][1])
编辑

要强制每个子批次的宽度为常量,请将这些代码行添加到上面的代码行中

# continued
plt.draw()
for eax in axs:
    # this id good for figure with 5 or less subplots
    p11 = eax.get_position()
    p11_new = [p11.x0, p11.y0, 1/6.8, p11.height]
    eax.set_position(p11_new)

为什么不将列数设置为数组长度,即
ncols=len(arr)
?请阅读以下问题:在保持2个子批次宽度的同时。将其设置为
ncols=len(arr)
只会将N个子图填充到整个图形宽度。在上面的示例中,2个子批次的宽度与上面的5个子批次一致。您可以只执行
axs[i].remove()
,但这不会使填充轴居中。如果确实需要,可以进入并更改轴位置(使用
axs[i]。获取轴位置
axs[i]。设置轴位置
),但这并不能回答问题。单个子批次的宽度必须与5个子批次一致,即使少于5个子批次subplots@TYL答案已更新。还有其他评论吗?