使用matplotlib面向对象的界面与seaborn绘图

我非常喜欢在OOP风格中使用matplotlib

 f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(...) axarr[1].plot(...) 

这使得更容易跟踪多个数字和子图。

问:如何使用seaborn这种方式? 或者,如何将此示例更改为OOP样式? 如何告诉seaborn绘图function, FigureFigure lmplot

这取决于你正在使用的seabornfunction。

海豹的绘图function大致分为两类

  • “轴级”function,包括regplotkdeplotkdeplot等等
  • lmplot ”function,包括lmplotfactorplotjointplot和其他一两个

第一组是通过明确的ax参数并返回一个Axes对象来标识的。 如上所述,您可以通过将Axes传递给它们来以“面向对象”的方式使用它们:

 f, (ax1, ax2) = plt.subplots(2) sns.regplot(x, y, ax=ax1) sns.kdeplot(x, ax=ax2) 

轴级函数只能绘制到轴上,否则不会混淆graphics,所以它们可以在面向对象的matplotlib脚本中完美地共存。

第二组函数(图级)的区别在于结果图可能包含几个总是以“有意义”的方式组织的轴。 这意味着这些function需要完全控制这个数字,所以不可能将一个lmplot到已经存在的一个上。 调用函数总是初始化一个graphics,并为其绘制的特定绘图进行设置。

但是,一旦你调用了lmplot ,它将返回FacetGridtypes的对象。 这个对象有一些方法可以在结果图上进行操作,这些方法对图的结构有一定的了解。 它还公开了FacetGrid.figFacetGrid.axes参数的底层graphics和轴数组。 jointplot函数非常相似,但它使用了JointGrid对象。 所以你仍然可以在面向对象的上下文中使用这些函数,但是所有的定制都是在你调用这个函数之后。