1. ホーム
  2. python

[解決済み] matplotlibのオブジェクト指向インターフェイスを使ってseabornでプロットする

2022-08-21 09:45:50

質問

私は matplotlib を使うことを強く希望します。

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

これにより、複数の人物やサブプロットを把握しやすくなります。

質問です。seabornをこのように使うにはどうしたらよいのでしょうか?あるいは、どのように この例 をOOPスタイルに変更するには?どのように seaborn のようなプロット関数を lmplot どの Figure または Axes にプロットするのでしょうか?

どのように解決するのですか?

どのseaborn関数を使用しているかによります。

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

  • 以下のような軸レベルの関数です。 regplot , boxplot , kdeplot などなど
  • 以下のような "図形レベル" 機能があります。 relplot , catplot , displot , pairplot , jointplot と1つまたは2つの他の

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

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

軸レベルの関数が描画するのは Axes にのみ描画し、それ以外には図形をいじらないので、オブジェクト指向の matplotlib スクリプトの中で完全に幸せに共存することができます。

関数の2番目のグループ (図レベル) は、結果のプロットが、常に意味のある方法で整理されるいくつかの軸を潜在的に含むことができるという事実によって区別されます。これは、関数が図を完全に制御する必要があることを意味します。 lmplot のように、すでに存在する図形の上に描画することはできません。関数を呼び出すと、常に図形が初期化され、描画する特定のプロットのためにセットアップされます。

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