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


103

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

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

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

質問:seabornをこのように使用する方法は?または、この例をOOPスタイルに変更するにはどうすればよいですか?伝える方法seabornのようなプロット関数やそれがプロットを?lmplotFigureAxes


1
関連:この問題と 考えられる回避策に対するこの回答これにより、海の図を作成し、すべての軸を後でサブプロットグリッドに移動できます。
ImportanceOfBeingErnest

回答:


228

それはあなたが使用している海の機能に少し依存します。

シーボーンのプロット関数は、大きく2つのクラスに分類されます。

  • 「軸レベル」などの機能を、regplotboxplotkdeplot、および他の多く
  • 「図レベル」を含む関数、lmplotfactorplotjointplot1つのまたは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.figFacetGrid.axes引数と引数で基になるFigureと軸の配列を公開します。jointplot機能は非常に似ていますが、使用するJointGridオブジェクトを。したがって、これらの関数をオブジェクト指向のコンテキストで引き続き使用できますが、すべてのカスタマイズは、関数を呼び出した後に行う必要があります。


これは本当に役に立ちました。ここに私の答えを見ている:stackoverflow.com/questions/27019079/...
デンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.