121

matplotlib私はOOPスタイルで使用することを強く好みます:

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

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

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

4

1 に答える 1

266

使用しているシーボーン機能によって少し異なります。

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

  • regplotboxplotkdeplot、その他多数の「軸レベル」関数
  • relplotcatplotdisplotpairplotjointplotおよびその他の 1 つまたは 2 つの関数を含む "Figure レベル" 関数

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

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

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

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

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

于 2014-05-31T18:22:14.647 に答える