Fig.gca() vs. fig.add_subplot()

Большинство примеров объектно-ориентированного matplotlib получают объект Axis с чем-то вроде

import matplotlib.pyplot as plt

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)

ax1.plot(...... etc.

Что я всегда считал неочевидным, особенно с точки зрения matlab. Недавно я обнаружил, что эквивалентные результаты можно получить с помощью

ax1 = fig1.gca()   # "GetCurrentAxis"

Это делает меня более разумным (возможно, только из-за использования в прошлом Matlab). Почему add_subplot() с запутанным 111 аргументом, выбранным в качестве предпочтительного способа получения объекта оси? Есть ли какая-либо функциональная разница?

Спасибо!

Ответ 1

plt.gca получает текущие оси, создавая при необходимости. Это эквивалентно только в случае простейших 1 осей.

Предпочтительный способ - использовать plt.subplots (и документы/примеры действительно немного отстают, если вы хотите начать делать вклад, обновление документов - отличное место для начала):

fig, ax = plt.subplots(1, 1)

или

fig, (ax1, ax2) = plt.subplots(2, 1)

и т.д.

Ответ 2

Для создания 3D-экземпляра есть три способа:

plt.gca(projection='3d')

plt.subplot(projection='3d')

fig = plt.figure()
fig.add_subplot(111, projection='3d') 

Может быть, третий путь более сложный.