11

いつプロット インスタンス ( PathCollection) を使用するか、いつプロット クラス自体を使用するかという質問の背後にあるロジックは何だろうと思いました。

import matplotlib.pyplot as plt
p = plt.scatter([1,2,3],[1,2,3])

散布図を表示します。それを機能させるには、次のように言わなければなりません。

plt.annotate(...)

軸ラベルまたは制限を構成するには、次のように記述します。

plt.xlim(...)
plt.xlabel(...)

等々。

しかし一方で、あなたは次のように書いています。

p.axes.set_aspect(...)
p.axes.yaxis.set_major_locator(...)

この背後にあるロジックは何ですか? どこか調べてもいいですか?残念ながら、ドキュメントでこの特定の質問に対する回答を見つけられませんでした。

グラフの構成に実際のインスタンスpをいつ使用し、pyplot クラスをいつ使用しますpltか?

4

2 に答える 2

7

PEP20 によると:

  • 「明示的は暗黙的よりも優れています。」
  • 「シンプルは複雑よりも優れている。」

多くの場合、「make-it-just-work」コードは pyplot ルートを使用します。これは、多くの人が気にしないすべての Figure と Axes の管理を隠しているためです。これは、対話モードのコーディング、単純な 1 回限りのスクリプト、または高レベルのスクリプトで実行されるプロットによく使用されます。

ただし、プロットを行うライブラリ モジュールを作成していて、ライブラリ ユーザーが独自に追加のプロットを行っていないという保証がない場合は、明示的に行い、pyplot インターフェースを避けるのが最善です。私は通常、ユーザーが操作したい軸や Figure オブジェクトをオプションの引数として受け入れるように関数を設計します (指定されていない場合は、plt.gcf() や plt.gca() を使用します)。

私が持っている経験則は、実行している操作がpyplotを介して実行できる場合ですが、そうすると「ステートマシン」が変更される可能性がある場合は、pyplotを避けます。pyplot を介したアクション (plt.xlim() など) は、現在の軸/図/画像 (「ステート マシン」) を取得/設定しますが、ax.set_xlim() などのアクションは取得しないことに注意してください。

于 2014-01-08T19:04:53.157 に答える
2

'plt' は単なるショートカットです。プロットが 1 つしかない場合に便利です。plt を直接使用すると、自動的に matplotlib によって「図」とサブプロットが作成されますが、複数のサブプロットを操作する場合は、「軸」メソッドを使用する必要があります。例:

fig = plt.figure()
a = fig.add_subplot(211)
b = fig.add_subplot(212)
print a.__class__ #<class 'matplotlib.axes.AxesSubplot'>
print fig.__class__ #<class 'matplotlib.figure.Figure'>
a.plot([0,1],[0,1],'r')
b.plot([1,0],[0,1],'b')
fig.show()

これは、「plt」を直接使用して行うことはできませんでした。

于 2013-12-13T02:19:12.313 に答える