Подход Pyplot может показаться более интуитивным с первого взгляда. И, конечно, это в значительной степени субъективно. Поэтому не стесняйтесь использовать его, если он соответствует вашим потребностям.
pyplot - это так называемый конечный автомат. Он будет работать на «текущей фигуре» и «текущих осях». Однако затем он, как и в первом случае, вызовет соответствующие методы текущих объектов. Например. plt.plot(...)
просто позвонит ax = plt.gca(); ax.plot(...)
внутренне в любом случае. Таким образом, можно решить напрямую работать с рассматриваемыми объектами, а не полагаться на pyplot, чтобы найти их.
Кроме того, pyplot не предоставляет полной функциональности matplotlib. Например. если вы хотите создать форматировщик для своих ярлыков, вам все равно придется использовать объектно-ориентированный интерфейс,
plt.gca().xaxis.set_major_formatter(...)
, и в этом случае может возникнуть соблазн иметь в распоряжении непосредственно оси ax
для работы на
ax.xaxis.set_major_formatter(...)
Точно так же, если вы хотите написать функцию для вывода чего-либо на оси, вы можете позволить этой функции принимать объект оси в качестве входных данных
def myplot(ax, data, **kwargs):
ax.plot(data, label = "My plot", **kwargs)
ax.set_title("My plot")
ax.legend()
Тогда повторное использование такой функции на любых осях очень удобно. Может быть, у вас есть одна фигура с осями для построения,
fig, ax = plt.subplots()
myplot(ax, data)
или у вас несколько осей на разных фигурах
fig1, (ax1, ax2) = plt.subplots(ncols=2)
fig2, (ax3, ax4) = plt.subplots(ncols=2)
myplot(ax2, data2)
myplot(ax4, data3)
Есть также случаи, когда вы вообще не хотите использовать pyplot, например при встраивании вашего графика в графический интерфейс, в этом случае вам нужно будет использовать такую структуру, как
fig = matplotlib.figure.Figure()
canvas = FigureCanvasQT(fig)
axes = fig.subplots(2,3)
axes[0,1].plot(...)
Наконец, следует отметить, что многие вопросы, которые люди задают здесь, в Stackoverflow, напрямую связаны с использованием pyplot вместо объектно-ориентированного подхода. Это не значит, что вы не должны его использовать, но в целом можно сказать, что pyplot увеличивает шансы выстрелить себе в ногу, если вы не обращаете максимального внимания на то, что представляют собой «текущие оси» при работе с pyplot.
Ввиду всего вышесказанного, matplotlib пришел к выводу, что лучше всего использовать объектно-ориентированный подход, хотя для очень простых примеров, подобных приведенным в этом вопросе, он может быть менее простым для использования. Даже если не использовать объектно-ориентированный стиль, понимание его как-то является обязательным условием использования matplotlib даже для средних сложных сюжетов.