Ответ 1
Это немного зависит от того, какую функцию вы используете.
Функции построения в морском море в целом разделены на два класса
- "Осевые" функции, включая
regplot
,boxplot
,kdeplot
и многие другие - Функции "на уровне рисунка", включая
lmplot
,factorplot
,jointplot
и один или два других
Первая группа идентифицируется путем принятия явного аргумента ax
и возврата объекта Axes
. Как вы можете предположить, вы можете использовать их в "объектно-ориентированном" стиле, передав им Axes
:
f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
Функции уровня осей будут только рисовать на Axes
и в противном случае не будут конфликтовать с фигурой, поэтому они могут прекрасно сосуществовать в объектно-ориентированном matplotlib script.
Вторая группа функций (уровень уровня) отличается тем, что полученный график может включать в себя несколько осей, которые всегда организованы "значимым" способом. Это означает, что функции должны иметь полный контроль над фигурой, поэтому невозможно построить, скажем, lmplot
, на тот, который уже существует. Вызов функции всегда инициализирует фигуру и устанавливает ее для конкретного графика, который он рисует.
Однако после вызова lmplot
он вернет объект типа FacetGrid
. Этот объект имеет некоторые методы работы на полученном графике, которые немного знают о структуре графика. Он также предоставляет базовую фигуру и массив осей в аргументах FacetGrid.fig
и FacetGrid.axes
. Функция jointplot
очень похожа, но использует объект JointGrid
. Таким образом, вы все равно можете использовать эти функции в объектно-ориентированном контексте, но все ваши настройки должны появиться после того, как вы вызвали функцию.