Python 使用matplotlib面向对象接口使用seaborn打印
我非常喜欢使用OOP风格的Python 使用matplotlib面向对象接口使用seaborn打印,python,oop,matplotlib,seaborn,Python,Oop,Matplotlib,Seaborn,我非常喜欢使用OOP风格的matplotlib: f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(...) axarr[1].plot(...) 这使得跟踪多个图形和子图变得更容易 问题:如何以这种方式使用seaborn?或者,如何更改为OOP风格?如何分辨seaborn打印函数,如lmplot它打印到哪个Figure或Axes?这取决于您使用的seaborn函数 seaborn中的绘图函数大致分为两类 “轴级”功能,包括regpl
matplotlib
:
f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
这使得跟踪多个图形和子图变得更容易
问题:如何以这种方式使用seaborn?或者,如何更改为OOP风格?如何分辨
seaborn
打印函数,如lmplot
它打印到哪个Figure
或Axes
?这取决于您使用的seaborn函数
seaborn中的绘图函数大致分为两类
- “轴级”功能,包括
、regplot
、boxplot
,以及许多其他功能kdeplot
- “图形级”功能,包括
,relplot
,catplot
,displat
,pairplot
和一个或两个其他功能jointplot
ax
参数并返回Axes
对象来识别。这表明,您可以通过将轴
传递给它们,以“面向对象”的方式使用它们:
f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
轴级函数只会绘制到轴上,不会弄乱图形,因此它们可以在面向对象的matplotlib脚本中完美共存
第二组功能(图形级)的区别在于,生成的图可能包含多个轴,这些轴始终以“有意义”的方式组织。这意味着函数需要完全控制图形,因此不可能将lmplot
绘制到已经存在的图形上。调用函数总是初始化图形,并为其绘制的特定绘图进行设置
但是,一旦调用了lmplot
,它将返回该类型的对象。这个对象有一些对结果图进行操作的方法,这些方法对图的结构有一点了解。它还公开了FacetGrid.fig
和FacetGrid.axes
参数处的底层图形和轴数组。jointplot
函数非常类似,但它使用了一个对象。因此,您仍然可以在面向对象的上下文中使用这些函数,但所有的自定义都必须在调用函数之后进行。这非常有用。看看我的答案:相关:以及一个可能的解决方法,这将允许创建一个seaborn图形,并在以后将所有轴移动到子地块栅格。