web-dev-qa-db-ja.com

matplotlibオブジェクト指向インターフェイスを使用したSeabornでのプロット

OOPスタイルでmatplotlibを使用することを強くお勧めします。

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

これにより、複数の図とサブプロットを追跡しやすくなります。

質問:この方法でシーボーンを使用するには?または、 この例 をOOPスタイルに変更する方法は? seabornなどのlmplotプロット関数にどのFigureまたはAxesをプロットするかを伝える方法

87
Frozen Flame

使用しているシーボーン機能に少し依存します。

Seabornのプロット関数は、大きく2つのクラスに分けられます。

  • regplotboxplotkdeplotなどの「軸レベル」関数
  • lmplotfactorplotjointplot、および他の1つまたは2つを含む「図レベル」関数

最初のグループは、明示的なax引数を取り、Axesオブジェクトを返すことで識別されます。これが示唆するように、それらにAxesを渡すことで、「オブジェクト指向」スタイルでそれらを使用できます。

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

軸レベルの関数はAxesにのみ描画し、それ以外の場合はFigureを台無しにしないため、オブジェクト指向のmatplotlibスクリプトで完全に共存できます。

関数の2番目のグループ(図レベル)は、結果のプロットに、常に「意味のある」方法で編成されたいくつかの軸が含まれる可能性があるという事実によって区別されます。つまり、関数はFigureを完全に制御する必要があるため、たとえばlmplotを既に存在するものにプロットすることはできません。この関数を呼び出すと、常にFigureが初期化され、描画している特定のプロット用にセットアップされます。

ただし、lmplotを呼び出すと、タイプ FacetGrid のオブジェクトが返されます。このオブジェクトには、プロットの構造について少し知っている結果のプロットを操作するためのメソッドがいくつかあります。また、FacetGrid.figおよびFacetGrid.axes引数で基になる図と軸の配列を公開します。 jointplot関数は非常に似ていますが、 JointGrid オブジェクトを使用します。したがって、これらの関数はオブジェクト指向のコンテキストで使用できますが、カスタマイズはすべて、関数を呼び出した後に行う必要があります。

196
mwaskom