web-dev-qa-db-ja.com

matplotlibを理解する:plt、figure、ax(arr)?

私はmatplotlibを本当に使い慣れていないので、ソリューションをできるだけ迅速かつ簡単に入手するためのツールとして常に使用してきたことを非常に恥ずかしく思います。だから私は基本的なプロット、サブプロットなどを取得する方法を知っており、時々再利用されるかなりの数のコードを持っています...しかし、matplotlibの「深い」知識はありません。

最近、これを変更して、いくつかのチュートリアルを自分で行う必要があると思いました。ただし、matplotlibsのpltfig(ure)およびax(arr)についてはまだ混乱しています。本当に違いは何ですか?

ほとんどの場合、「素早い」プロットでは、_pyplot as plt_だけを使用し、_plt.plot_で直接プロットする人がいます。プロットするものは複数あるため、頻繁にf, axarr = plt.subplots()...しかし、ほとんどの場合、データをaxarrに入れ、図fを無視するコードのみが表示されます。

だから、私の質問は:matplotlibを操作するクリーンな方法は何ですか? pltのみを使用する場合、figureは何に使用するのですか?サブプロットはデータのみを含む必要がありますか?それとも、サブプロット内のスタイリング、プロットのクリアなどのすべてに有効かつ良い習慣ですか?

これが広範囲に及ばないことを願っています。基本的に私は、plt <-> fig <-> ax(arr)の真の目的(およびそれらを適切に使用する場合と方法)についてのアドバイスを求めています。

チュートリアルも歓迎します。 matplotlibのドキュメントは、私をかなり混乱させています。凡例のスケールを変更したり、プロットマーカーや色を変更したりするなど、本当に具体的なものを検索する場合、公式ドキュメントは非常に正確ですが、一般的な情報はあまりよくありません。多すぎる例、目的の実際の説明はありません...多かれ少なかれ、すべての可能なAPIメソッドと引数の大きなリストのように見えます。

32
daniel451

pyplotは、matplotlibの「スクリプト」レベルAPIです(matplotlibで多くのことを実行するための最高レベルのAPI)。これは、Matlabでできるのと同様の方法で、手続き型インターフェイスを使用してmatplotlibを使用できるようにします。 pyplotには、すべての関数が(@tacaswell dixit)に委任する「現在の図」と「現在の軸」の概念があります。したがって、モジュールpyplotで利用可能な関数を使用すると、「現在の図」と「現在の軸」にプロットされます。

どこに何をプロットするかを細かく制御したい場合は、FigureAxesのインスタンスを使用してオブジェクト指向のAPIを使用する必要があります。

pyplotで使用できる関数には、Axesにも同等のメソッドがあります。

リポジトリから matplotlibの構造

  • Figureは、この階層の最上位のコンテナです。それはすべてが描かれている全体的なウィンドウ/ページです。複数の独立した図を作成でき、Figuresには複数の軸を含めることができます。

だが...

  • ほとんどのプロットはAxesで行われます。軸は、事実上、データをプロットする領域とそれに関連付けられている目盛り/ラベルなどです。通常、Axesはsubplot(Axesを通常のグリッドに配置します)の呼び出しで設定するため、ほとんどの場合、AxesおよびSubplotは同義です。

  • AxesにはXAxisとYAxisがあります。これらには、目盛り、目盛りの位置、ラベルなどが含まれます。

プロットの構造を知りたい場合は、これにアクセスしてください link

15
kikocorreoso

this チュートリアルは、FigureやAxesのようなmatplotlibのオブジェクト階層の基本的な概念、および現在のFigureや現在のAxesの概念をよく説明していると思います。

簡単な答えが欲しい場合:複数の軸(軸とは異なります)をラップするコンテナーであるFigureオブジェクトには、この画像に示すように、凡例、線、目盛りなどの小さなオブジェクトも含まれています- matplotlibドキュメント

enter image description here

だから私たちがするとき

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> type(fig)
<class 'matplotlib.figure.Figure'>
>>> type(ax)
<class 'matplotlib.axes._subplots.AxesSubplot'>

FigureオブジェクトとそのFigureに含まれるAxesオブジェクトを作成しました。

2
Firas Omrane
  • pyplotは、MATLABに精通しており、すばやくダーティなプロットを作成したい人にとって、MATLABに似たAPIです。
  • figureは、MATLABスタイルのプロットを気にしない人のためのオブジェクト指向APIです。

したがって、どちらか一方を使用できますが、両方を併用することはできません。

0
Hun