使用matplotlib面向对象的界面与seaborn绘图
我非常喜欢在OOP风格中使用matplotlib
:
f, axarr = plt.subplots(2, sharex=True) axarr[0].plot(...) axarr[1].plot(...)
这使得更容易跟踪多个数字和子图。
问:如何使用seaborn这种方式? 或者,如何将此示例更改为OOP样式? 如何告诉seaborn
绘图function, Figure
或Figure
lmplot
?
这取决于你正在使用的seabornfunction。
海豹的绘图function大致分为两类
- “轴级”function,包括
regplot
,kdeplot
,kdeplot
等等 - “
lmplot
”function,包括lmplot
,factorplot
,jointplot
和其他一两个
第一组是通过明确的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
,它将返回FacetGrid
types的对象。 这个对象有一些方法可以在结果图上进行操作,这些方法对图的结构有一定的了解。 它还公开了FacetGrid.fig
和FacetGrid.axes
参数的底层graphics和轴数组。 jointplot
函数非常相似,但它使用了JointGrid
对象。 所以你仍然可以在面向对象的上下文中使用这些函数,但是所有的定制都是在你调用这个函数之后。