我更喜欢在OOP风格中使用matplotlib
:
f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
这样可以更轻松地跟踪多个数字和子图。
问题:如何以这种方式使用seaborn?或者,如何将this example更改为OOP样式?如何告诉seaborn
绘制lmplot
函数,其中Figure
或Axes
所绘制的函数是什么?
答案 0 :(得分:188)
这取决于你正在使用的seaborn功能。
seaborn中的绘图功能大致分为两类
regplot
,boxplot
,kdeplot
和许多其他功能lmplot
,factorplot
,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
对象。因此,您仍然可以在面向对象的上下文中使用这些函数,但所有自定义都必须在您调用该函数之后进行。