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

时间:2014-05-31 11:39:02

标签: python oop matplotlib seaborn

我更喜欢在OOP风格中使用matplotlib

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

这样可以更轻松地跟踪多个数字和子图。

问题:如何以这种方式使用seaborn?或者,如何将this example更改为OOP样式?如何告诉seaborn绘制lmplot函数,其中FigureAxes所绘制的函数是什么?

1 个答案:

答案 0 :(得分:188)

这取决于你正在使用的seaborn功能。

seaborn中的绘图功能大致分为两类

  • "轴级别"功能,包括regplotboxplotkdeplot和许多其他功能
  • "图级别"功能,包括lmplotfactorplotjointplot和一两个其他

通过采用显式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.figFacetGrid.axes参数中公开基础图形和轴数组。 jointplot函数非常相似,但它使用JointGrid对象。因此,您仍然可以在面向对象的上下文中使用这些函数,但所有自定义都必须在您调用该函数之后进行。