我非常喜欢matplotlib
在 OOP 风格中使用:
f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
这使得跟踪多个图形和子图变得更加容易。
问题:如何以这种方式使用seaborn?或者,如何将此示例更改为 OOP 样式?如何判断seaborn
绘图功能,如lmplot
哪个Figure
或Axes
它绘图?
我非常喜欢matplotlib
在 OOP 风格中使用:
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
、displot
、pairplot
和jointplot
其他一两个第一组通过采用显式ax
参数并返回一个Axes
对象来标识。正如这表明的那样,您可以通过将它们传递Axes
给它们来以“面向对象”的方式使用它们:
f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
轴级函数只会在图形上绘制Axes
并且不会与图形混淆,因此它们可以在面向对象的 matplotlib 脚本中完美地共存。
第二组函数(图形级)的区别在于,结果图可能潜在地包括几个总是以“有意义”方式组织的轴。这意味着函数需要完全控制图形,因此不可能绘制lmplot
一个已经存在的图形。调用该函数总是会初始化一个图形并将其设置为它正在绘制的特定绘图。
但是,一旦您调用lmplot
了 ,它将返回一个 类型的对象FacetGrid
。这个对象有一些方法可以对结果图进行操作,这些方法对图的结构有所了解。它还在FacetGrid.fig
和FacetGrid.axes
参数处公开了基础图形和轴数组。该jointplot
函数非常相似,但它使用了一个JointGrid
对象。因此,您仍然可以在面向对象的上下文中使用这些函数,但是您的所有自定义都必须在您调用该函数之后进行。