Соглашения о функциях matplotlib: подзаговоры против одной фигуры
Я действительно путаюсь с тонкими различиями в функциях (они так называются?) В matplotlib при работе с подсюжетами и отдельными фигурами.
В качестве примера:
Если я хочу изменить xlim на одной фигуре, я бы сделал: plt.xlim()
Если я захочу изменить xlim на фигуре подзаговора, я сделаю: ax.set_xlim()
Почему это? Кто-нибудь может отправить меня на сайт, который объясняет конвенции? Это простой пример, потому что я знаю, что они разные, и как, но есть ряд тех, которых я не знаю, и мне трудно разобраться, например:
1) Чтобы применить коллекцию к участку: ax.collection(collection_name)
, Как вы делаете это для одной фигуры?
2) Чтобы применить метки тиканья к участку: ax.xaxis.ticklabels(tick_labels)
, Как вы делаете это для одной фигуры?
Извините, это такой новый вопрос!
1 ответ
Вы столкнулись с различиями между интерфейсом pyplot/ конечного автомата и интерфейсом OO. См. Какой рекомендуемый способ построения: matplotlib или pylab? и Как я могу прикрепить функцию pyplot к экземпляру фигуры? для более длинных объяснений.
Для более длинного урока см. Анатомия Matplotlib
Существует также некоторая путаница со слоями объектов в mpl:
Важные занятия
Figure
Вся фигура. Отслеживает все дочерние оси, совокупность "специальных" художников (названия, легенды фигур и т. Д.) И холст. Не беспокойтесь о канве, это очень важно, так как именно этот объект на самом деле делает рисунок, чтобы получить ваш график, но как пользователь он более или менее невидим для вас.
Axes
Это то, что вы считаете "сюжетом", это область изображения с пространством данных. Он имеет 2 или 3 осевых объекта (x, y, а иногда и z), а a содержит целую группу художников.
Axis
Это числовые линии, похожие на объекты. Они заботятся об установке границ графика и создании меток и меток. У них есть Locator
и Formatter
для сортировки, куда идут галочки и как генерировать метки
Artist
В основном все, что вы можете видеть на рисунке, это художник (даже Figure
, Axes
, а также Axis
объекты). Это включает Text
объекты, Line2D
объекты, collection
объекты, Patch
объекты... (вы поняли). Когда фигура отображается, все художники рисуются (рекурсивно) на холсте. Данный художник может быть только в одном Axes
,
API слои
pylab
Это в основном просто пространство имен, в которое массово импортируется целая куча вещей (numpy, pyplot, mlab (корабли с matplotlib)) from foo import *
, Это может быть очень удобно для интерактивной работы, но не стоит использовать именно скрипты. Первоначальная цель этого
pyplot
Это слой конечного автомата, который отслеживает все ваши открытые фигуры и имеет понятие "текущая фигура" (plt.gcf()
) и "текущие оси" (plt.gca()
). Большинство функций в pyplot
являются очень тонкими (сгенерированными программно) обертками вокруг обращений к слою OO (plt.foo()
-> plt.gca().foo()
или же plt.gcf().foo()
в зависимости от функции). Опять же, это может быть удобно, но может быстро стать ограничивающим / сбивающим с толку / глобальное состояние вызывает проблемы.
Слой ОО
Это слой, который фактически управляет созданием художников (например, ax.plot(...)
создает кучу Line2D
объекты). Для написания сценариев или всего, что вы намереваетесь использовать повторно, это слой, который вы должны попытаться использовать. Чтобы написать свои собственные функции печати, я рекомендую написать такие функции:
def my_plotting_fun(ax, data, data, ...):
ax.do_stuff
return list_of_artists_added