使用matplotlib面向对象的接口与seaborn绘制使用matplotlib面向对象的接口与s

2019-05-09 04:51发布

我强烈地倾向于使用matplotlib在OOP风格:

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

这使得更容易跟踪的多种图形和次要情节。

问:如何使用seaborn这种方式? 或者说,如何改变这个例子来OOP的风格? 如何分辨seaborn像绘图功能lmplotFigureAxes它密谋?

Answer 1:

这取决于一点上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对象。 所以,你仍然可以在面向对象的环境中使用这些功能,但所有的定制已经来到你调用的函数之后。



文章来源: Plotting with seaborn using the matplotlib object-oriented interface