Python-使用matplotlib面向对象的界面进行seaborn绘图

发布于 2021-02-02 23:12:13

我非常喜欢matplotlib以OOP风格使用:

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

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

问题:如何以这种方式使用seaborn?或者,如何将此示例更改为OOP样式?如何分辨seaborn绘图功能(例如lmplot哪个Figure或哪个)Axes?

关注者
0
被浏览
136
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    这在某种程度上取决于你使用的是哪种功能。

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

    • “Axes-level” 功能,包括regplotboxplotkdeplot,和许多其他
    • “Figure-level”功能,包括lmplotfactorplotjointplot和一个或两个其他

    通过采用显式ax参数并返回Axes对象来标识第一组。如此建议,你可以将它们传递Axes给它们,从而以“面向对象”的方式使用它们:

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

    轴级功能仅会吸引到,Axes并且不会与图形混淆,因此它们可以在面向对象的matplotlib脚本中完美地愉快地共存。

    第二组功能(Figure-level)的特征在于,生成的图可能包含多个轴,这些轴始终以“有意义”的方式组织。这意味着这些功能需要完全控制图形,因此不可能绘制lmplot一个已经存在的图形。调用该函数总是会初始化图形并将其设置为要绘制的特定图。

    但是,一旦调用lmplot,它将返回类型的对象FacetGrid。该对象具有一些对生成的图进行操作的方法,这些方法对图的结构有所了解。它还在FacetGrid.figFacetGrid.axes参数处公开了基础图形和轴数组。该jointplot功能非常相似,但是它使用一个JointGrid对象。因此,你仍然可以在面向对象的上下文中使用这些函数,但是所有自定义必须在调用该函数之后进行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看