Python 为什么matplotlib子批次以1开头

Python 为什么matplotlib子批次以1开头,python,matplotlib,Python,Matplotlib,使用matplotlib创建子绘图时,需要从1开始,而大多数其他python代码都是从零开始的。因此,要创建第一个子地块(左上角) 我本以为0是第一个子批次 ax = fig.add_subplot(3,4,0) 我看到过这样的解释:“我们从matlab得到了这个”,但这似乎是一个特别不令人满意的答案。答案实际上是:“这是为了matlab兼容性”。在快捷整数表示法方面有一个小优势(子批(231)而不是子批(2,3,1))。如果不使用字符串,则无法以这种方式表示基于0的系统。然而,这种快捷方式通

使用matplotlib创建子绘图时,需要从
1
开始,而大多数其他python代码都是从零开始的。因此,要创建第一个子地块(左上角)

我本以为
0
是第一个子批次

ax = fig.add_subplot(3,4,0)
我看到过这样的解释:“我们从matlab得到了这个”,但这似乎是一个特别不令人满意的答案。

答案实际上是:“这是为了matlab兼容性”。在快捷整数表示法方面有一个小优势(
子批(231)
而不是
子批(2,3,1)
)。如果不使用字符串,则无法以这种方式表示基于0的系统。然而,这种快捷方式通常是一个坏主意,应该只在可读性不受关注的交互式场景中使用

正如@Cong-Ma所提到的,在大多数情况下,您会使用
子图
对2D数组进行索引,而不是使用matlab风格的数值系统。这是一个更好的方法

例如:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=3)
axes[0, 0].plot(range(10))

plt.show()

它并不完全相同,因为它还添加了所有子批次,但您始终可以隐藏不希望可见的子批次(
ax.axis('off')
ax.set(visible=False)
)。

但“我们从matlab获得了这个”是答案!我发现自己使用得更频繁了。它返回一个由
Axis
对象组成的数组,您可以用通常的Python方式对数组进行索引
import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=3)
axes[0, 0].plot(range(10))

plt.show()